Dab*_*bas 3 oauth-2.0 asp.net-core openiddict
我正在构建 ASP.NET Core 1.1 应用程序(跨平台)并尝试(使用此示例)access_token在请求/connect/token端点时将自定义声明添加到返回的内容中。
我需要的是不仅返回序列化的声明,access_token而且在响应中返回它们,如下所示:
{
"token_type": "Bearer",
"access_token": "...",
"expires_in": 1799,
"custom_claim": "..."
}
Run Code Online (Sandbox Code Playgroud)
我在互联网上发现我必须使用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);
Run Code Online (Sandbox Code Playgroud)
注意: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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |