gpt4 book ai didi

asp.net-core - 如何使用 OIDC 处理 ASP.net Core 中的数组声明值

转载 作者:行者123 更新时间:2023-12-02 18:21:52 28 4
gpt4 key购买 nike

我正在运行 IdentityServer4 的 Skorubas 实现 https://github.com/skoruba/IdentityServer4.Admin

出于某种原因,我最终收到了一个声明类型为“角色”的角色声明和一个包含当前用户所有角色的数组值:["SkorubaIdentityAdminAdministrator","MyRole"]

现在如果我想使用授权属性来保护“页面”:[授权(角色=“我的角色”)]

这总是以访问被拒绝而告终,因为 ASP.net Core 期望多个声明具有相同的声明类型,因此在这种情况下声明将是

类型 | 值(value)

角色:“SkorubaIdentityAdmin管理员”

角色:“我的角色”

是否有任何“最佳实践”来解析收到的声明并在它们被 ASP.net core 处理之前重新格式化它们,或者告诉 OpenIdConnect 扩展将数组格式处理为多个声明?

最佳答案

通常 JWT 中接收的声明可以是数组或对象以及简单类型。使用 .NET 属性进行授权时,处理此问题的方法是通过策略。

它们非常简单而且 this Curity tutorial有一些例子。此代码片段显示整个 ClaimsPrincipal 可用于策略,因此您可以在您的用例中轻松使用数组声明:

options.AddPolicy("lowRisk", policy =>
policy.RequireAssertion(context =>
context.User.HasClaim(claim =>
claim.Type == "risk" && Int32.Parse(claim.Value) < 50
)
)
);

[HttpGet("lowrisk")]
[Authorize( Policy = "lowRisk")]
public IActionResult LowRisk()
{
return Ok();
}

关于asp.net-core - 如何使用 OIDC 处理 ASP.net Core 中的数组声明值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70769770/

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