IdentityServer4在Asp.Net Core中的应用(二)

    继续上次受权的内容,客户端模式后咱们再说如下密码模式,先回顾下密码模式的流程:数据库

咱们仍是使用上次的代码,在那基础上修改,在IdentityServer4里面有一个IdentityServer4.Test的引用,它里面包含了测试用户的类,咱们先将这个引用添加进来,并配置咱们的用户信息,修改Config类,添加一个GetTestUsers()方法,固然在实际项目中,咱们须要去从咱们的数据库中去读取用户名及密码等信息,这里只作测试,添加内容以下:api

咱们再添加一个客户端,更改其受权模式为密码模式,内容以下:服务器

修改其受权模式为ResourceOwnerPassword,下面再将咱们的用户依赖注入到系统中,学习

至此咱们的受权服务器已经修改完成,咱们经过Postman测试是否能够拿到咱们的access_token测试

OK,测试成功。咱们的Api是不须要改动的,下面咱们再新建立一个第三方应用程序,去请求受权并获取资源,代码以下spa

using System;
using System.Net.Http;
using IdentityModel;
using IdentityModel.Client;

namespace ThirdPartyAppByPwd
{
    class Program
    {
        static void Main(string[] args)
        {
            //请求受权服务器
            var diso=DiscoveryClient.GetAsync("http://localhost:5000").Result;
            if(diso.IsError)
            {
                Console.WriteLine(diso.Error);
            }

            //受权服务器根据客户端发来的请求返回令牌
            var tokenClient=new TokenClient(diso.TokenEndpoint,"pwdClient","pwdSecrect");
            //使用密码模式
            var tokenResponse =tokenClient.RequestResourceOwnerPasswordAsync("allen","123456","api").Result;
            if(tokenResponse.IsError)
            {
                Console.WriteLine(tokenResponse.Error);
            }
            //若是成功,则打印输出返回的令牌信息
            else
            {
                Console.WriteLine(tokenResponse.Json);
            }

            //建立HttpClient对象
            var httpClient=new HttpClient();

            //设置Authorization的Value值
            httpClient.SetBearerToken(tokenResponse.AccessToken);

            //根据受权服务器返回的令牌信息请求Api资源
            var response= httpClient.GetAsync("http://localhost:5001/api/values").Result;

            //若是返回结果为成功,输出Api资源的结果
            if(response.IsSuccessStatusCode)
            {
                Console.WriteLine(response.Content.ReadAsStringAsync().Result);
            }
        }
    }
}

只改动了两个地方,把ClientID和ClientSecret的值修改了,以及请求受权服务器的方法改成: 对象

RequestResourceOwnerPasswordAsync(username,password,scope),运行结果以下:blog

以上就是完整的密码模式的受权,下面是对以上的简化流程:token

扫描二维码关注个人公众号,共同窗习,共同进步!资源

相关文章
相关标签/搜索