layout: docs-default
自定义授权类型
令牌 endpoint 可以扩展接受自定义授权类型。
下面是用自定义授权类型申请令牌的例子。
POST /connect/token
Authorization: Basic xxx:yyy
grant_type=my_custom_credential&
scope=api1&
my_credential=foobar&
some_other_parameter=quux&
使用IdentityServer的扩展机制,我们可以注册一个自定义授权的验证器来使用验证
my_custom_credential`.
自定义授权验证器的工作室验证传入的数据,并把他映射到IdentityServer的用户上。
首先需要实现下面的接口:
public interface ICustomGrantValidator
{
Task<CustomGrantValidationResult> ValidateAsync(ValidatedTokenRequest request);
string GrantType { get; }
}
GrantType
属性用来指定哪一个自定义授权类型,这个验证器回来处理。ValidateAsync
方法用来获取原始请求中的数据 (比如:像例子中的读取自定义的参数)并验证像作用域和客户端id等工作。
验证结果或者是一个映射到用户的Principal(带声明),或者是一个错误信息。
通过下面的方法来注册自定义授权验证器:
factory.CustomGrantValidators.Add(
new Registration<ICustomGrantValidator, MyCustomGrantValidator>());
要使用这个自定义验证器,需要按照下面的方法来定义配置:
-
Flow
必须设置为Custom
-
AllowedCustomGrantTypes
必须包含自定义授权类型
典型的自定义验证器用来在令牌类型间转换(比如:SAML到JWT或者Facebook到JWT),来桥接这两个身份管理系统。
请参看 rfc7521 - Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants 了解更多。