【问题标题】:Authenticate Azure Function by Token with Resource通过令牌和资源对 Azure 函数进行身份验证
【发布时间】:2018-11-06 13:36:51
【问题描述】:

我有一个通过 AD 登录启用授权/身份验证的 Azure 函数。

我正在尝试通过使用 client_credentials 生成令牌来进行身份验证:

参考以下代码:

        var tokenendpoint = "https://login.microsoftonline.com/172f05a2-f956-4856-b4c8-9580a54dbd56/oauth2/token";

        string clientID = "eaeff78a-26ef-4bcb-b977-638316ff15b7";
        string clientSecret = "HvVlipQkpuezmD4YiUcWVpZ5Cn1cP3vxiW61pSpDo8k=";
        string resource = "eaeff78a-26ef-4bcb-b977-638316ff15b7"; //ClientID
        string grantType = "client_credentials";

        using (var reqToken = new WebClient())
        {
            NameValueCollection parameters = new NameValueCollection();
            parameters.Add("client_id", clientID);
            parameters.Add("client_secret", clientSecret);
            parameters.Add("resource", resource);
            parameters.Add("grant_type", grantType);

            var responseTokenBytes = reqToken.UploadValues(tokenendpoint, "POST", parameters);
            string responseTokenContent = Encoding.UTF8.GetString(responseTokenBytes).Replace(@"\", "");

            azureFunctionTokenResponse = responseTokenContent.Deserialize<AzureFunctionTokenResponseBase>();
            AzureFunctionToken = azureFunctionTokenResponse.access_token;
        }

如果我将资源设置为函数的 ClientID,一切正常。 但是,在许多在线示例中,Resource 设置为 Azure Function Uri。

如果我将 Resource 设置为 https://www.xxxxxx.azurewebsites.com,则会收到 401 错误。

这是为什么?

我花了一整天的时间让这个最终工作,但文档中没有任何地方说输入 ClientID 作为资源??

【问题讨论】:

    标签: azure oauth-2.0 azure-functions


    【解决方案1】:

    如果您使用相同的 AAD 应用为您的 Azure 函数启用授权/身份验证,并且您的客户端代码获取用于访问您的 Azure 函数的 access_token,您可以将 resource 指定给 应用程序 ID (ClientID) 或您的 AAD 应用的 App ID URI

    一般情况下,我们会将 ClientID 用作 resource,应用服务授权/身份验证会将您在 身份验证/授权 > Azure Active Directory 设置下配置的客户端 ID 与 @987654327 进行比较@ 传入 JWT 不记名令牌的属性,您可以利用 https://jwt.io/ 来解码您的令牌。

    但是,在许多在线示例中,资源设置为 Azure 函数 Uri。

    如果我将 Resource 设置为 https://www.xxxxxx.azurewebsites.com,则会收到 401 错误。

    我假设这些示例可能使用 App ID URI,您可以为您的 AAD 应用(设置 > 属性 > 应用)将 App ID URI 设置为 https://www.xxxxxx.azurewebsites.com ID URI),那么您可以使用 App ID URI 作为资源参数。

    注意:对于这种方法,您可能需要为您的 Azure Function 调整 Azure Active Directory 设置,您可以将 Client ID 保留为 AAD 应用的 Application ID 并添加 App ID URIALLOWED TOKEN AUDIENCES 列表,或者您可以将其替换为您的 App ID URI。

    此外,您可以通过ADAL 库获取令牌。此外,如果您为您的 Azure 函数和客户端应用创建每个 AAD 应用,您可以关注此issue

    【讨论】:

    • 想在我的代码中解码令牌。是否有任何 url 或其他东西可以让我获得 client_id?
    猜你喜欢
    • 2020-07-17
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2014-10-30
    • 2019-03-13
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多