asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
客户端模式定义
用户向客户端提供用户名密码。客户端使用这些信息,向“服务提供商” 进行认证。
先上密码模式的工作流程图:

密码模式和客户端模式差不多,但是此时User已经非常信任Client,以至于连User的认证口令都给Client;
这通常用在用户对客户端高度可信的情况下出现这种情况。 认证服务器只有在其他授权模式无法执行的情况下,才能考虑使用这种模式
注意:这种认证模式默认还是需要客户端模式支持的哦;即在认证过程中同样会认证Client的权限;
而且,这种认证模式,需要认证的资源(Resource)已经和User有关系了哦。
AuthorizationServer与ResourceServer还是用上一讲的项目
新建项目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权限认证系列
- 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)
- asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
- asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)
asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)的更多相关文章
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】
密码模式(Resource Owner Password Credentials Grant)中,用户向客户端提供自己的用户名和密码.客户端使用这些信息,向"服务商提供商"索要授权 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- IdentityServer4 实现 OAuth 2.0(密码模式 - HTTP Post 方式)
之前写了一篇文章:<IdentityServer4 实现 OpenID Connect 和 OAuth 2.0> 上面这篇文章虽然详细,但都是点到为止的介绍,并没有实际应用的示例,所以,后 ...
- asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:Windows认证
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:Forms认证
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:HTTP基本认证(http basic)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
- asp.net权限认证:摘要认证(digest authentication)
asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...
随机推荐
- spring加载过程中jar包加载不了,解决方法
当我们在开发spring项目时,一般会将jar包放到webInf/lib下,这样是myeclipse自动将jar包加载到tomcat中webapps下,但是当我们新建一个lib文件夹的情况下,我们ad ...
- Flash CS 自定义组件
2012年的时候,做了一些研究,可以后来没有去整理,没有去用到项目里头,现在把这些东西都放出来纪念一下,也给有需要的人作为参考. 基本知识: Flash使用基本知识与ActionScript 3.0的 ...
- CodeForces 617C Watering Flowers
无脑暴力题,算出所有点到圆心p1的距离的平方,从小到大排序. 然后暴力枚举p1的半径的平方,计算剩余点中到p2的最大距离的平方,枚举过程中记录答案 #include<cstdio> #in ...
- Runtime简介以及常见的使用场景(此内容非原创,为转载内容)
Runtime简称运行时,是一套比较底层的纯C语言的API, 作为OC的核心,运行时是一种面向对象的编程语言的运行环境,其中最主要的是消息机制,Objective-C 就是基于运行时的. 所谓运行时, ...
- OSD的主要实现方法和类型(转)
源:OSD的主要实现方法和类型 目前有两种主要的OSD实现方法:外部OSD发生器与视频处理器间的叠加合成;视频处理器内部 支持OSD,直接在视频缓存内部叠加OSD信息. 外部OSD发生器与视频处理器间 ...
- PowerShell学习小结
1. 获取所有别名信息Get-Alias 2. 获取指定别名信息Get-Alias xx 3. 通过command name获得指定别名信息Get-Alias -Definition xx-xxx 4 ...
- 解决VirtualBox下安装虚拟机(Ubuntu)出错(不能为虚拟电脑Ubuntu打开一个新的任务)的有关问题
[转]http://www.myexception.cn/program/1964906.html 解决VirtualBox下安装虚拟机(Ubuntu)出错(不能为虚拟电脑Ubuntu打开一个新的任务 ...
- ashx文件中使用session提示“未将对象引用设置到对象的实例”
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...
- Java 和Oracle的数据类型
一.BigDecimal BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成. 如果为零或正数,则标度是小数点后的位数. 如果为负数,则将该数的非标度值乘以 ...
- magento中文语言包的使用
magento中文语言包的使用,我们在百度上随便就能找到一大堆. 由于本人今天是第一次使用magento,找到目录magento/app/locale 并且用语言包中的locale文件夹替换掉mag ...