我正在构建ASP.NET Core 1.1应用程序(跨平台),并尝试(使用此示例)access_token
在请求/connect/token
端点时向返回的自定义声明中添加自定义声明。
我需要的不仅是返回在中序列化的声明,access_token
而且还要在响应中将其返回,如下所示:
{
"token_type": "Bearer",
"access_token": "...",
"expires_in": 1799,
"custom_claim": "..."
}
我在互联网上发现的内容必须使用AspNet.Security.OpenIdConnect.Server
并编写我的提供程序才能执行我想要的操作。
使用第一个样本不是简单的方法吗?
我正在使用OAUth 2.0,授予类型Password
且没有JWT。
不要求不使用JWT,这只是我在ASP.NET 4.5中曾经使用过OAuth
我需要的不仅是返回在access_token中序列化的声明,而且要在这样的响应中返回它们:
尽管我鼓励您将这些声明存储在身份令牌中-以便客户端可以以完全标准的方式轻松读取它们,但在OpenIddict 1.0和2.0 RTM中还是可以的。为此,您有2个选择:
ticket.SetProperty("custom_claim" + OpenIddictConstants.PropertyTypes.String, user.Id);
注意:OpenIddictConstants.PropertyTypes.String
是一个特殊的后缀,指示添加到票证的身份验证属性可以作为令牌响应的一部分公开。如果您希望将声明作为JSON数字或更复杂的JSON结构返回,则可以使用其他常量。
services.AddOpenIddict()
// Register the OpenIddict core services.
.AddCore(options =>
{
// ...
})
// Register the OpenIddict server handler.
.AddServer(options =>
{
// ...
options.AddEventHandler<OpenIddictServerEvents.ApplyTokenResponse>(
notification =>
{
if (string.IsNullOrEmpty(notification.Context.Error))
{
var principal = notification.Context.Ticket.Principal;
var response = notification.Context.Response;
response["custom_claim"] = principal.FindFirst("your_claim_attached_to_the_principal").Value;
}
return Task.FromResult(OpenIddictServerEventState.Unhandled);
});
})
// Register the OpenIddict validation handler.
.AddValidation();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句