[Practice Note] 1.OAuth四种授权模式实现

OAuth授权模式

  1. 授权码模式 authorization code
  2. 简化模式 implicit grant type
  3. 密码模式 resource owner password credentials
  4. 客户端模式 client credentials grant

四种授权模式代码实现

1.在api项目中添加Nuget引用
1)Microsoft.Owin.Security (添加该引用下面的会默认添加)
2)Microsoft.Owin.Cookies
3)Microsoft.Owin
4)Microsoft.Owin.Host.SystemWeb

2.添加OAuth文件,添加授权类
在这里插入图片描述

3.实现类方法
MyOAuthAuthorizationServeProvider.cs类继承 OAuthAuthorizationServerProvider,实现重构授权Provider

代码中的TestUserRepository 是定义的全局用户类,可根据自己项目的情况实现(可以直接查询数据库),实现身份校验

namespace EVMTest.OAuth
{
   
    public class MyOAuthAuthorizationServeProvider : OAuthAuthorizationServerProvider
    {
   
        /// <summary>
        /// grant_type password,code
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
        {
   
            #region 客户端模式校验

            string clientid;
            string clientsecret;
            if (!context.TryGetBasicCredentials(out clientid, out clientsecret))
                context.TryGetFormCredentials(out clientid, out clientsecret);

            if (!string.IsNullOrEmpty(context.ClientId))
            {
   
                if (clientid != TestUserRepository.client.ClientId)
                {
   
                    context.SetError("Invalid_clientid", "clientid is not valid");
                    return Task.FromResult<object>(null);
                }

                if (!string.IsNullOrWhiteSpace(clientsecret))
                    context.OwinContext.Set("ClientSecret", clientsecret);

                //context.Validated(clientid);
                //return base.ValidateClientAuthentication(context);
            }
            #endregion

            context.Validated();
            return Task.FromResult<object>(null);
            //return base.ValidateClientAuthentication(context);
        }

        /// <summary>
        /// 验证重定向redirect_url  用于验证被注册的url
        /// grant_type authorization_code
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
        {
   
            if (context.ClientId == TestUserRepository.client.ClientId)
            {
   
                context.Validated(TestUserRepository.client.RedirectUrl);
            }
        }

        /// <summary>
        /// code
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override async Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context)
        {
   
            if (context.AuthorizeRequest.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值