IdentityServer4 实现自定义 GrantType 授权模式
2017-08-12 07:35
453 查看
OAuth 2.0 默认四种授权模式(GrantType):
授权码模式(
简化模式(
密码模式(
客户端模式(
使用 IdentityServer4,我们可以自定义授权模式吗?答案是可以的,比如我们自定义实现一个
创建
修改
DI 增加注入对象:
调用示例代码:
Http 访问示例:
参考资料:
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跨平台或扫描二维码关注
授权码模式(
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/token grant_type=anonymous& scope=api2& token=...& client_id=api1.client client_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跨平台或扫描二维码关注
相关文章推荐
- IdentityServer4 实现自定义 GrantType 授权模式
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【密码模式(Resource Owner Password Credentials)】
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务【客户端模式(Client Credentials Grant)】
- 基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化
- 【ASP.NET Core分布式项目实战】(一)IdentityServer4登录中心、oauth密码模式identity server4实现
- ASP.NET Core分布式项目-2.oauth密码模式identity server4实现
- [WCF权限控制]利用WCF自定义授权模式提供当前Principal[原理篇]
- iOS中自定义UIImageView用TargetAction模式实现关灯小游戏
- JBPM通过AssignmentHandler绑定自定义用户模型实现用户授权(1)
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
- Microsoft.AspNet.Identity 自定义使用现有的表—登录实现
- Shiro Review——自定义Realm实现授权
- NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证
- 自定义语言的实现——解释器模式(五)
- Ocelot简易教程(五)之集成IdentityServer认证以及授权
- 自定义语言的实现——解释器模式(六)
- 自定义语言的实现——解释器模式(六)
- NodeJs实现自定义分享功能,获取微信授权+用户信息
- 【Apache Mina2.0开发之二】自定义实现Server/Client端的编解码工厂(自定义编码与解码器)!
- spring-oauth-server实践:授权方式四:client_credentials 模式的refresh_token?