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

客户端模式定义

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

 

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

 

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

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

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

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

 

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

新建项目ResourceOwnerPasswordCredentialGrant

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
    }

注意这几句哦:

1
2
var clientId = "123456";           // 客户端的认证口令(即默认还是需要认证客户端的权限的哦)
var clientSecret = "abcdef";
1
。。。<br><br>parameters.Add("grant_type", "password");  // 指定服务端以密码模式认证
1
parameters.Add("UserName", "UserName");    // User的认证口令
1
parameters.Add("Password", "Password");<br><br>

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

 

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

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

 

 

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

 

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

 

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

 

asp.net权限认证系列

  1. asp.net权限认证:Forms认证
  2. asp.net权限认证:HTTP基本认证(http basic)
  3. asp.net权限认证:Windows认证
  4. asp.net权限认证:摘要认证(digest authentication)
  5. asp.net权限认证:OWIN实现OAuth 2.0 之客户端模式(Client Credential)
  6. asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
  7. asp.net权限认证:OWIN实现OAuth 2.0 之授权码模式(Authorization Code)
  8. asp.net权限认证:OWIN实现OAuth 2.0 之简化模式(Implicit)

 

posted @   ljr忒修斯之船  阅读(2245)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示