首页 > Windows开发 > 详细

asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)

时间:2017-01-31 23:24:58      阅读:1307      评论:0      收藏:0      [点我收藏+]

asp.net权限认证系列

asp.net权限认证:Forms认证

asp.net权限认证:HTTP基本认证(http basic)

asp.net权限认证:Windows认证

asp.net权限认证:摘要认证(digest authentication)

asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)

asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)

 

客户端模式定义:用户向客户端提供用户名密码。客户端使用这些信息,向“服务提供商” 进行认证。

先上密码模式的工作流程图:

技术分享

 

密码模式和客户端模式差不多,但是此时User已经非常信任Client,以至于连User的认证口令都给Client;

这通常用在用户对客户端高度可信的情况下出现这种情况 认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式

注意:这种认证模式默认还是需要客户端模式支持的哦;即在认证过程中同样会认证Client的权限;

而且,这种认证模式,需要认证的资源(Resource)已经和User有关系了哦。

 

我们上一个demo来讲解

AuthorizationServer与ResourceServer还是用上一讲的项目

1、新建项目ResourceOwnerPasswordCredentialGrant

技术分享

 

    static void Main(string[] args)
        {
            const string url = "http://localhost:8270/";
            var client = new HttpClient();

            var clientId = "123456";
            var clientSecret = "abcdef";
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                "Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId + ":" + clientSecret)));

            // 密码模式
            var parameters = new Dictionary<string, string>();
            parameters.Add("grant_type", "password");
            parameters.Add("UserName", "UserName");
            parameters.Add("Password", "Password");

            // 提交
            var result = client.PostAsync(url + "OAuth/Token", new FormUrlEncodedContent(parameters)).Result.Content.ReadAsStringAsync().Result;
            var entity = JsonConvert.DeserializeObject<Token>(result);
            Console.WriteLine("Token: {0}", entity.AccessToken);

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", entity.AccessToken);
            var result2 = client.GetAsync("http://localhost:8001/api/Values").Result.Content.ReadAsStringAsync().Result;
            Console.WriteLine("Result: {0}", result2);

            Console.ReadKey();
        }

注意这几句哦:

var clientId = "123456";           // 客户端的认证口令(即默认还是需要认证客户端的权限的哦)
var clientSecret = "abcdef";
。。。

parameters.Add("grant_type", "password"); // 指定服务端以密码模式认证
parameters.Add("UserName", "UserName");    // User的认证口令
parameters.Add("Password", "Password");

 客户端有效代码就这些了,我再来看看服务端需要哪些更改

 

 1、Startup.Auth.cs文件修改OnGrantResourceOwnerCredentials = GrantResourceOwnerCredentials

 这个方法就是后台处理密码模式认证关键的地方

 技术分享

 

我们看看他的实现过程,也很简单的

技术分享

 

OK,我们来看看运行效果;

技术分享

 

 认证成功!是不是很简单呀?

 

asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)

原文:http://www.cnblogs.com/lanxiaoke/p/6359611.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!