获取 Azure 访问令牌

Posted

技术标签:

【中文标题】获取 Azure 访问令牌【英文标题】:Obtain Azure Access Token 【发布时间】:2018-06-18 04:21:58 【问题描述】:

我收到了这个讨厌的错误,我不知道我在这里做错了什么。我的代码甚至看起来与此博客上的代码非常相似,但就我而言,这不起作用。

GetAzureAccessToken

错误信息

"'authority' Uri 应该在路径中至少有一段(即 https:////...)\r\n参数名称:authority"

public static string GetAzureAccessToken(string clientId, string clientSecret)
    
        string tenandId = "tenandId";
        string loginUri = $"https://login.windows.net/";

        var authCtx =
            new AuthenticationContext(String.Format(CultureInfo.InvariantCulture, loginUri, tenandId));
        var credential = new ClientCredential(clientId: clientId, clientSecret: clientSecret);

        var result = authCtx.AcquireToken(resource: "https://management.core.windows.net/",
            clientCredential: credential);

        if(result == null)
            throw new InvalidOperationException("Failed to aquire token");

        return result.AccessToken;
    

【问题讨论】:

【参考方案1】:

你定义的权限不对,应该是:

var authCtx = new AuthenticationContext(loginUri + tenantId);

另外,我想这并不重要,但我通常使用https://login.microsoftonline.com/tenant-id 作为权限。

【讨论】:

我的 (loginUri +tenantId) 有问题,假设我的tenandid 是“abcd2344/jskkeh234”然后 url 变为 login.microsoftonline.com/abcd2344/jskkeh234”但由于 / 请求的 uri 将是“login.microsoftonline.com/abcd2344 " 并且是错误的tenandid 租户 ID 中没有斜线。它是一个 UUID/GUID。或者,您可以使用 Azure AD 租户中经过验证的域名之一,例如租户名称.onmicrosoft.com。 奇怪...我得到了谁/让我仔细检查一下 您可以通过转到 Azure 门户 -> Azure Active Directory -> 属性来找到租户 ID 看起来我使用 serviceprincle 键作为tenandId :P 谢谢

以上是关于获取 Azure 访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

从 Powershell 获取 Azure Active Directory 访问令牌

尝试从 Azure AD 获取访问令牌时获取响应代码 400

获取 Azure 访问令牌

在 Azure 中获取访问令牌时用户名或密码不正确

从Azure获取令牌以访问Microsoft Graph后无法调用函数

如何使用 Azure Easy Auth 获取访问令牌?