gpt4 book ai didi

Azure 公开 API 与 API 权限

转载 作者:行者123 更新时间:2023-12-02 07:01:57 25 4
gpt4 key购买 nike

我有一个 Web API 和一个前端应用程序。

在前端应用程序的 API 权限 中,我添加了对我的 API (Files.Download) 的权限。

enter image description here

在 Web API 的公开 API 中,我已为此范围授权客户端应用程序。

enter image description here

现在,为了检查调用应用程序是否具有所需的范围,我从 Controller 操作方法调用以下代码:

 public static void VerifyUserHasAnyAcceptedScope(this HttpContext context,
params string[] acceptedScopes)
{
if (acceptedScopes == null)
{
throw new ArgumentNullException(nameof(acceptedScopes));
}
Claim scopeClaim = context?.User?.FindFirst("http://schemas.microsoft.com/identity/claims/scope");
if (scopeClaim == null || !scopeClaim.Value.Split(' ').Intersect(acceptedScopes).Any())
{
context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
string message = $"The 'scope' claim does not contain scopes '{string.Join(",", acceptedScopes)}' or was not found";
throw new HttpRequestException(message);
}
}

但我注意到,如果我没有在公开 API 中授权前端应用程序,那么范围就不属于声明的一部分。

那么 API 权限 的意义何在?我不明白,这似乎是多余的,同时也是无用的,因为它没有任何效果;

最佳答案

因此,当您基本上想要在不同意访问该 api 的情况下预授权用户时,请使用“授权客户端应用程序”。因此,我想如果您在 api 权限中配置了预授权的范围,它会自动返回它们。如果您不添加预授权,那么它将正常运行,您必须在 token 请求期间专门请求范围。然后,当它尝试获取具有该 webapi 范围的 token 时,如果需要,它将提示用户同意。

这就是说,是的,如果在请求token的时候没有请求scope,就不在claims里面,这是正常的。如果您想访问 Web api,则应该在 token 调用期间请求该范围。当您这样做时,它将位于 jwt 访问 token 中。

关于Azure 公开 API 与 API 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62438643/

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