IdentityServer4 实现自定义 GrantType 授权模式
来源:互联网 发布:淘宝商品怎么下架 编辑:程序博客网 时间:2024/06/05 14:15
OAuth 2.0 默认四种授权模式(GrantType):
授权码模式(
authorization_code
)简化模式(
implicit
)密码模式(
password
)客户端模式(
client_credentials
)
使用 IdentityServer4,我们可以自定义授权模式吗?答案是可以的,比如我们自定义实现一个anonymous
授权模式(匿名访问)。
创建AnonymousGrantValidator
(继承IExtensionGrantValidator
):
public class AnonymousGrantValidator : IExtensionGrantValidator{
private readonly ITokenValidator _validator;
public AnonymousGrantValidator(ITokenValidator validator) { _validator = validator; }
public string GrantType => "anonymous";
public async Task ValidateAsync(ExtensionGrantValidationContext context) { //var userToken = context.Request.Raw.Get("token"); //if (string.IsNullOrEmpty(userToken)) //{ // context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant); // return; //} //var result = await _validator.ValidateAccessTokenAsync(userToken); //if (result.IsError) //{ // context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant); // return; //} // get user's identity //var sub = result.Claims.FirstOrDefault(c => c.Type == "sub").Value; var claims = new List<Claim>() { new Claim("role", GrantType) }; // Claim 用于配置服务站点 [Authorize("anonymous")] context.Result = new GrantValidationResult(GrantType, GrantType, claims); }}
修改Client
配置:
new Client{ ClientId = "client1", AllowedGrantTypes = GrantTypes.List(GrantTypes.ResourceOwnerPassword.FirstOrDefault(), "anonymous"), //一个 Client 可以配置多个 GrantType AllowOfflineAccess = true, AccessTokenLifetime = 3600 * 6, //6小时 SlidingRefreshTokenLifetime = 1296000, //15天 ClientSecrets = { new Secret("123".Sha256()) }, AllowedScopes = new List<string> { "api2" }}
DI 增加注入对象:
builder.AddExtensionGrantValidator<AnonymousGrantValidator>();
调用示例代码:
public async Task<TokenResponse> AnonymousAsync(string userToken){ var payload = new { token = userToken }; // create token client var client = new TokenClient(disco.TokenEndpoint, "client1", "123"); // send custom grant to token endpoint, return response return await client.RequestCustomGrantAsync("anonymous", "api2", payload);}
Http 访问示例:
POST /connect/tokengrant_type=anonymous&scope=api2&token=...&client_id=api1.clientclient_secret=secret
参考资料:
Extension Grants
相关文章:
IdentityServer4(OAuth2.0服务)折腾笔记
IdentityServer4 实现 OpenID Connect 和 OAuth 2.0
IdentityServer4 使用OpenID Connect添加用户身份验证
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 指定角色授权(Authorize(Roles="admin"))
IdentityServer4 SigningCredential(RSA 证书加密)
原文地址:http://www.cnblogs.com/xishuai/p/identityserver4-implement-custom-granttype.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
阅读全文
0 0
- IdentityServer4 实现自定义 GrantType 授权模式
- IdentityServer4 实现 OpenID Connect 和 OAuth 2.0
- IdentityServer4:IdentityServer4+API+Client实践OAuth2.0客户端模式(1)
- IdentityServer4 指定角色授权(Authorize(Roles=&quot;admin&quot;))
- shiro授权,自定义realm实现授权,shiro与项目集成,在项目中实现认证及授权
- JBPM通过AssignmentHandler绑定自定义用户模型实现用户授权
- Shiro Review——自定义Realm实现授权
- Shiro 自定义realm授权与认证的实现
- .net FrameWork WebAPI 如何添加保护接口,授权服务器是.net Core 的IdentityServer4 ,并且对signalr进行保护
- 实现OAuth2.0服务端【授权码模式(Authorization Code)】
- 自定义授权(accessDecisionManager)
- indenty 自定义认证 授权。
- 自定义认证授权Realm
- 自定义realm进行授权
- Shiro第三篇【授权、自定义reaml授权】
- SQL2000选择授权模式
- oAuth2 feign 授权模式
- IdentityServer4 配置负载均衡
- ASP.NET Core MVC – 自定义 Tag Helpers
- C#使用Xamarin开发可移植移动应用(2.Xamarin.Forms布局,本篇很长,注意)附源码
- Visual Studio 2017 15.3 预览版发布,接近最终版
- IdentityServer4 配置负载均衡
- NET中解决KafKa多线程发送多主题的问题
- IdentityServer4 实现自定义 GrantType 授权模式
- 深入聊聊微服务架构的身份认证问题
- 释放.NET Big Memory和内存映射文件的能量
- .NET Standard@Xamarin.Forms
- ASP.NET Core MVC – Form Tag Helpers
- ASP.NET Core 源码学习之 Options[4]:IOptionsMonitor
- ASP.NET Core MVC – Caching Tag Helpers
- ASP.NET Core 源码学习之 Options[3]:IOptionsSnapshot
- C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码