gpt4 book ai didi

c# - 如何正确请求 Azure 不记名 token 或为什么它要求我发送 "scope"参数?

转载 作者:行者123 更新时间:2023-12-03 22:55:05 25 4
gpt4 key购买 nike

情况:

我有一个 WPF 应用程序,它必须调用通过 Azure Active Directory 保护的 http-trigger 函数。在尝试检索不记名 token 以进行进一步调用时,我得到以下响应(无论我是通过 postman 还是代码完成):

AADSTS90014: The required field 'scope' is missing



我所做的:

我阅读了大量不同的文章和博客文章,解释了如何使用 Azure AD 保护 http-trigger 函数并通过休息请求检索承载 token 。按照我认为最适合我的需求的一篇文章,我创建了 azure 函数应用程序、azure 函数、azure AD 配置和应用程序注册的完整设置。

之后,我只想通过发送不记名 token 和其他一些参数来使用 azure 函数并获得结果,但我在检索不记名 token 时遇到了麻烦。

代码(以防万一):
var restClient = new RestClient("https://login.microsoftonline.com/{myTenant}/oauth2/v2.0/token");
var restRequest = new RestRequest(Method.POST);
restRequest.AddHeader("content-type", "application/x-www-form-urlencoded");
restRequest.AddParameter("grant_type", "client_credentials", ParameterType.GetOrPost);
restRequest.AddParameter("client_id", "{app id from azure ad app}", ParameterType.GetOrPost);
restRequest.AddParameter("client_secret", "{generated secret}", ParameterType.GetOrPost);
restRequest.AddParameter("ressource", "https://{somefunctionname}.azurewebsites.net", ParameterType.GetOrPost);
var restResponse = restClient.Execute(restRequest);

postman body 参数(x-www-form-urlencoded):

grant_type = "client_credentials"

client_id = {app id from azure ad app}

client_secret = {generated secret}

ressource = "https://somefunctionname.azurewebsites.net"



以及我用来获取 token 的网址:

https://login.microsoftonline.com/{myTenant}/oauth2/v2.0/token



我的问题:

因此,详细了解情况后,我有两个主要问题:
  • 为什么身份验证服务在我的情况下需要“范围”参数(我的设置或休息请求中是否有问题)?
  • 如果我必须发送一个范围值,要发送哪个范围值?
  • 最佳答案

    根据你提供的信息,我认为你是想使用Azure AD v2.0来访问Azure AD保护的功能。如果是这样,由于您使用 Azure AD v2.0,您需要将资源更新为作用域。并且范围的值应该是```{app id URI}/.default。更多详情请引用 OAuth 2.0 client credentials flow
    enter image description here

    关于如何获取访问 token ,请引用以下步骤。

  • 注册客户端访问web api

    一种。注册新的 Azure AD 应用程序

    enter image description here
    enter image description here

    湾配置权限
    enter image description here

    C。创建一个新的 secret
    enter image description here

    d.获取应用 ID 网址
    enter image description here
  • 代码
  •  var client = new RestClient("https://login.microsoftonline.com/<your tenant>/oauth2/v2.0/token");
    var request = new RestRequest(Method.POST);
    request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
    request.AddParameter("grant_type", "client_credentials", ParameterType.GetOrPost);
    request.AddParameter("client_id", "your app id", ParameterType.GetOrPost);
    request.AddParameter("client_secret", "your app secret", ParameterType.GetOrPost);
    request.AddParameter("scope", "<your app id url>/.default", ParameterType.GetOrPost);
    IRestResponse response = client.Execute(request);

    结果:
    enter image description here
    enter image description here

    关于c# - 如何正确请求 Azure 不记名 token 或为什么它要求我发送 "scope"参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58523111/

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