Oatuth2协议的密码模式介绍
-
- 这里借用下阮一峰老师画的图(博客地址=》http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html)
用户会将用户名,密码给予客户端,但是客户端不保存此信息,客户端带着用户的密码请求认证服务器,认证服务器密码验证通过后后将token返回给客户端。
IdentityServer4密码模式实现
- 我们不需要修改资源服务器,我们在客户端模式下的认证服务器的Config配置中,添加一个Client,允许我们使用密码模式访问授权服务器获取token,再添加一个测试用户。同时修改我们的startup,在ConfigureServices方法中配置测试用户,代码如下所示:
//定义可以访问该API的客户端 public static IEnumerable
GetClients() { return new List
{ new Client() { ClientId = "client", AllowedGrantTypes = GrantTypes.ClientCredentials, //设置模式,客户端模式 ClientSecrets = { new Secret("secret".Sha256()) }, AllowedScopes = { "api1" } }, new Client() { ClientId="pwdClient", AllowedGrantTypes=GrantTypes.ResourceOwnerPassword, //密码模式 ClientSecrets= {new Secret("secret".Sha256()) }, AllowedScopes= { "api1" } } }; } public static List
GetTestUsers() { return new List
{ new TestUser { SubjectId="1", Username="lmc", Password="" } }; } public void ConfigureServices(IServiceCollection services) { services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(Config.GetApiResources()) //配置资源 .AddInMemoryClients(Config.GetClients()) //配置客户端 .AddTestUsers(Config.GetTestUsers()); //配置测试用户 services.AddMvc(); }
此时我们使用我们定义的用户名和密码来访问我们的授权服务器(这里使用postman 要注意body的数据格式为x-www-form-urlencoded)=》

带着我们拿到的token,去访问资源=》

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206195.html原文链接:https://javaforall.net
