申博在线娱乐登入

asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)

前言

本文来源:http://www.yu833.com/tech_163_com/

申博在线娱乐登入,陈小春版《鹿鼎记》已经播出了18年,12月7号,韦爵爷的5房老婆齐聚,如果神龙教主夫人和方怡师姐也出场,就能再现最强后宫团了。另几家温泉馆并未明确规定消费者禁止携带手机入内,其中便包括庄小姐遇到其他消费者自拍的“汤山一号”门店,其中一家位于徐家汇的温泉馆表示,可以为前来泡汤的消费者提供手机防水袋等“贴心”物品。金鹰核心资源的前十大重仓股中包括了中潜股份、今天国际、科大国创、爱司凯、昊志机电、达志科技、高澜股份等多只年内上市的次新股,该基金对次新股可谓情有独钟。杨秀珠之所以千方百计逃往美国,就是想钻政治法律空子。

中国联通4G业务仍处于追赶阶段,截至2016年三季度末,中国联通4G用户达到8890万户,同比增长173.11%,但仍落后于中国移动的4.81亿户与中国电信的1.07亿户。而这些条件都指向了新世界,只不过,新世界拉上了同一家族的另一个平台周大福或许多少有些出人意料。这一系列新变化,透出了三个重要信号:不唯年龄、重基层、机构瘦身。相关图集

尽管每年年底都会出现ST公司扎堆“”,也有不少公司保壳成功,但是在重组新规的严厉监管之下,通过各种重组翻身的难度越来越高,市场人士认为,投资者要注意年底的可能性,慎防踩到地雷,对于概念股的炒作必须谨慎参与。MihirSharma讽刺道,这就相当于这些收入调查官员中了彩票一样。富国中证智能汽车(LOF)2016-01-072016-02-01国投双债丰利定开债券A2016-01-182016-01-29国投双债丰利定开债券C2016-01-182016-01-29鹏华添利货币ETFB2016-01-112016-01-22长信利泰灵活配置混合2016-01-082016-02-19西部利得行业主题优选混合2015-12-102016-02-05海富通东财大数据混合2016-01-042016-01-22浦银安盛睿智精选混合A2016-01-042016-01-29浦银安盛睿智精选混合C2016-01-042016-01-29交银卓越回报灵活配置混合2016-01-112016-01-29她联系了几个放贷人,有的利息特别高,有的沟通存在问题。

OAuth 2.0默认四种授权模式(GrantType)

本章主要介绍密码模式(resource owner password credentials),OAuth2.0资源所有者密码授权功能允许客户端将用户名和密码发送到令牌服务,并获得该用户的访问令牌.

认证步骤:

  • 用户将用户名密码提供给客户端
  • 客户端再将用户名密码发送给授权服务器,请求令牌
  • 授权服务器确定判断信息是否有误,返回给客户端令牌

创建授权服务器

创建一个API项目工程,我这边以端口5000的形式进行后面的讲解.

Package

PM> Install-package IdentityServer4 -version 2.5.3

创建一个类Config(配置要保护的资源,和可以访问的API的客户端服务器)

   public class Config
    {
        //<summary>
        //    定义要保护的资源
        //</summary>
        //<returns></returns>
        public static IEnumerable<ApiResource> GetApiResources() {
            return new List<ApiResource>
            {
               new ApiResource("api1","MyApi")
            };
        }
        //<summary>
        //    定义授权客户端
        //</summary>
        //<returns></returns>
        public static IEnumerable<Client> GetClients() {
            return new List<Client>
            {
                new Client(){ 
                    ClientId="client",
                    AllowedGrantTypes=GrantTypes.ResourceOwnerPassword,
                    ClientSecrets=
                    {
                      new Secret("secret".Sha256())
                    },
                    AllowedScopes={ "api1",IdentityServerConstants.StandardScopes.OfflineAccess /如果要获取refresh_tokens ,必须在scopes中加上OfflineAccess
                    },
                    AllowOfflineAccess=true/主要刷新refresh_token,
        
                }
            };
        }
    }

此处AllowedGrantTypes需要设置为ResourceOwnerPassword(密码凭证).

配置Startup

再走到ConfigureServices方法注入IdentityServer4服务

   public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddIdentityServer()
                .AddDeveloperSigningCredential()
                .AddInMemoryApiResources(Config.GetApiResources())
                .AddInMemoryClients(Config.GetClients())
                .AddResourceOwnerValidator<ResourceOwnerPasswordValidator>();/注入自定义登录验证

        }

IdentityServer4默认提供了两种证书加密配置
AddDeveloperSigningCredential AddTemporarySigningCredential
添加内存ApiResourceAddInMemoryApiResources
添加内存Client AddInMemoryClients
添加自定义登录验证AddResourceOwnerValidator

自定义用户验证
    public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
    {
        public Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {
            if (context.UserName == "test" && context.Password == "test")
            {
                context.Result = new GrantValidationResult(
                 subject: context.UserName,
                 authenticationMethod: OidcConstants.AuthenticationMethods.Password);
            }
            else
            {
                /验证失败
                context.Result = new GrantValidationResult(
                    TokenRequestErrors.InvalidGrant,
                    "invalid custom credential"
                    );
            }
            return Task.FromResult(0);
        }
    }

在Configure方法中添加IdentityServer4服务中间件

app.UseIdentityServer();

创建ApiResource

创建一个客户端项目,这边我将端口设置为5001

Package

PM> Install-package IdentityServer4 -version 2.5.3

配置Startup

在ConfigureServices添加认证服务器地址

      public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            services.AddAuthentication("Bearer")
              .AddIdentityServerAuthentication(options =>
              {
                  options.Authority = "/localhost:5000";/授权服务器地址
                   options.RequireHttpsMetadata = false;/不需要https    
                   options.ApiName = "api1";
              });
        }

在Configure方法中添加认证服务中间件

app.UseAuthentication();

Run

在客户端程序values控制器上面增加[Authorize]

直接访问资源服务器/localhost:5001/api/values

code 401

启动授权服务器

申博在线娱乐登入/localhost:5000/.well-known/openid-configuration

发现端点可通过/.well-known/openid-configuration

获取token

这边我用postman进行测试

code 200

access_token我们获取到了,再拿着token通过postman请求资源程序,

code 200
成功了

refresh_token

获取请求授权接口后会返回access_token expires
_in 等内容,expires_in是有效期(s),当然我们可以自定义有效期,access_token失效后用户需要重新授权,client才能拿到新的access_token.但是有了refresh_token后,client检测到token失效后可以直接通过refresh_token向授权服务器申请新的token,当然refresh_token也是有有效期的。
AbsoluteRefreshTokenLifetime的默认有效期为2592000秒/30天。SlidingRefreshTokenLifetime的默认有效期为1296000秒/15天。

在认证服务器中我再scopes加上了OfflineAccess
IdentityServerConstants.StandardScopes.OfflineAccess /如果要获取refresh_tokens ,必须在scopes中加上OfflineAccess

获取refresh_token

通过refresh_token再去获取access_token

通过postman请求获取资源

概要

示例地址申博在线娱乐登入/github_com/fhcodegit/IdentityServer4.Samples

posted @ 2019-09-28 10:34  申博在线娱乐登入HueiFeng  阅读(...)  评论(...申博在线娱乐登入编辑  收藏
www.11psb.com www.7788shenbo.com www.shenbo1.com 申博在线体育投注登入 sun138.comwww www.6699sun.com
申博app手机直营网 太阳城官网 旧版太阳城申博开户 菲律宾申博手机app版直营网 申博游戏吧直营网 申博手机版下载登入
菲律宾太阳网娱乐登入 申博亚洲太阳城娱乐直营网 申博游戏登入 申博娱乐手机登入网址 申博网址大全直营网 菲律宾申博电子游戏直营网