rek*_*cul 3 c# azure-active-directory bearer-token azure-functions
我有一个 WPF 应用程序,它必须调用通过 Azure Active Directory 保护的 http-trigger 函数。在尝试检索不记名令牌以进行进一步调用时,我得到以下响应(无论我是通过邮递员还是代码完成):
AADSTS90014:缺少必填字段“范围”
我阅读了大量不同的文章和博客文章,这些文章和博客文章解释了如何使用 Azure AD 保护 http 触发功能并通过休息请求检索不记名令牌。按照我认为最适合我的需求的一篇文章,我创建了 azure 函数应用程序、azure 函数、azure AD 配置和应用程序注册的完整设置。
之后,我只想通过发送不记名令牌和其他一些参数来使用 azure 函数并获得结果,但我在检索不记名令牌时遇到了麻烦。
代码(以防万一):
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);
Run Code Online (Sandbox Code Playgroud)
邮递员身体参数(x-www-form-urlencoded):
grant_type = "client_credentials"
client_id = {来自 azure 广告应用的应用 ID}
client_secret = {生成的秘密}
ressource = " https://somefunctionname.azurewebsites.net "
以及我用来获取令牌的网址:
https://login.microsoftonline.com/ {myTenant}/oauth2/v2.0/token
因此,详细了解情况后,我有两个主要问题:
Jim*_* Xu 11
根据你提供的信息,我认为你想使用Azure AD v2.0来访问受Azure AD保护的功能。如果是这样,由于您使用 Azure AD v2.0,您需要将资源更新为作用域。并且范围的值应该是```{app id URI}/.default。有关更多详细信息,请参阅OAuth 2.0 客户端凭据流程。

关于如何获取访问令牌,请参考以下步骤。
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3701 次 |
| 最近记录: |