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权限认证系列
- 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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人