gpt4 book ai didi

c# - 使用 AAD 作为身份提供程序从 Azure 函数应用程序中的 token 检索角色

转载 作者:行者123 更新时间:2023-12-03 01:18:39 27 4
gpt4 key购买 nike

我在 Azure 中有一个工作设置,其中函数应用程序使用 AAD 中的应用程序注册受 OAuth 保护。

在这个应用程序注册中,我定义了两个角色; 管理员开发人员。我已将这两个角色分配给自己,现在我想检索该角色以确定允许用户执行哪些类型的操作。

为了尝试了解发生了什么,我将以下内容添加到 protected 端点:

[FunctionName("Test")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req, CancellationToken ct)
{
bool isDeveloper = req.HttpContext.User.HasClaim("roles", "Developer");
bool isAdministrator = req.HttpContext.User.HasClaim("roles", "Administrator");
_logger.LogInformation($"Has role developer? {isDeveloper}"); // true
_logger.LogInformation($"Has role administrator? {isAdministrator}"); // true

bool isDeveloperBuiltin = req.HttpContext.User.IsInRole("Developer");
bool isAdministratorBuiltin = req.HttpContext.User.IsInRole("Administrator");
_logger.LogInformation($"Has role developer using built in? {isDeveloperBuiltin}"); // false
_logger.LogInformation($"Has role administrator using built in? {isAdministratorBuiltin}"); // false
foreach (Claim claim in req.HttpContext.User.Claims)
{
_logger.LogInformation(claim.Type + " : " + claim.Value + "\n");
}
}

我的 token 中角色声明的名称是roles,但在幕后,IsInRole 函数会检查我的 token 中没有的声明 ClaimsType.Role。将我的 token 粘贴到 jwt.ms 显示:

"roles": [
"Developer",
"Administrator"
]

对于 Microsoft 自己发行的 token ,角色声明为何不同?我在这里误解了什么吗?

如果可能的话,我想使用实用程序方法IsInRole,但我暂时已经解决了这个问题,并编写了一个基本上具有相同功能的小实用程序:

public bool IsUserInRole(ClaimsPrincipal principal, Role role)
{
return principal.HasClaim("roles", role.ToString());
}

但是,我想了解这里发生了什么以及我可以采取哪些步骤来使用 IsInRole 方法。我使用自己的实用方法是不是做错了什么?

最佳答案

这是 Azure 函数的已知限制。您可以在this阅读有关讨论。 github问题。所以你目前的方法是可行的。然而,

我建议编写一个扩展方法(可能是我喜欢的,因为它更干净)。

public static class ClaimsPrincipalExtensions
{
public static bool IsUserInRole(this ClaimsPrincipal principal, Role role)
{
return principal.HasClaim("roles", role.ToString());
}
}

关于c# - 使用 AAD 作为身份提供程序从 Azure 函数应用程序中的 token 检索角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72954804/

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