gpt4 book ai didi

oauth-2.0 - 使 User.Identity 包含访问 token 负载中的电子邮件地址

转载 作者:行者123 更新时间:2023-12-02 23:40:07 26 4
gpt4 key购买 nike

我们通过内省(introspection)使用 OAuth 来验证访问 token 。

app.UseOAuthIntrospection(options =>
{
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
options.Authority = "http://localhost:12345/";
options.Audiences.Add("ResourceServer01");
options.ClientId = "ResourceServer01";
options.ClientSecret = "secret_secret_secret";
});

这大部分是有效的。

connect/introspect 上的授权服务器响应良好。

{
"active": true,
"iss": "http://localhost:12345/",
"sub": "797264b3-194c-483f-08fb-08d3cbab9158",
"scope": "openid email roles",
"iat": 1471998289,
"nbf": 1471998289,
"exp": 1472000089,
"jti": "274cbb7f-9412-4d69-8c02-ca6a500b4a36",
"token_type": "Bearer",
"aud": [
"ResourceServer01",
"ResourceServer02"
],
"email": "shaun@bigfont.ca",
"AspNet.Identity.SecurityStamp": "4956a5c3-9efd-4f51-9746-43a187698e1e"
}

对资源服务器的请求通过了Authorize 属性。这也不错。

[Authorize(ActiveAuthenticationSchemes = OAuthValidationDefaults.AuthenticationScheme)]
[HttpGet("message")]
public IActionResult GetMessage() {
var identity = User.Identity as ClaimsIdentity;
if (identity == null) {
return BadRequest();
}
return Json(User);
}

但是,User 不包含 subemail 属性。它看起来就像这样:

{
"claims": [
{
"issuer": "LOCAL AUTHORITY",
"originalIssuer": "LOCAL AUTHORITY",
"properties": {},
"subject": {
"authenticationType": "Bearer",
"isAuthenticated": true,
"actor": null,
"bootstrapContext": null,
"claims": []
}
}
]
}

我们如何配置资源服务器以在声明中包含 subemail 属性?

这里是our code on GitHub .

最佳答案

声明可能存在(如果不存在,则这是自省(introspection)中间件中的错误),但 JSON.NET 不太擅长序列化 Claim/ClaimsIdentity/ClaimsPrincipal,可能是因为这些类型具有循环引用(例如 Claim.Subject/ClaimsIdentity.Claims)。

尝试使用 User.FindFirst(ClaimTypes.NameIdentifier)?.ValueUser.FindFirst(ClaimTypes.Email)?.Value/确认主题标识符和电子邮件地址在那里。

如果有效,请考虑返回您的声明的投影,而不是 ClaimsPrincipal 实例:

return Json(
from claim in User.Claims
select new { claim.Type, claim.Value }
);

这是调试窗口中用户的屏幕截图。

Visual Studio Code Debug Window showing the User

关于oauth-2.0 - 使 User.Identity 包含访问 token 负载中的电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39112718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com