【问题标题】:Can't obtain Azure Oauth V2 access token in C#无法在 C# 中获取 Azure Oauth V2 访问令牌
【发布时间】:2020-09-29 01:13:26
【问题描述】:

我正在尝试从 Azure Web 应用程序...C# MVC 应用程序获取访问令牌。这是我正在使用的代码。

    public string GetToken()
    {
        string authority = string.Format(CultureInfo.InvariantCulture, AuthEndPoint, tenantId);

        var credential = new ClientCredential(clientId, clientSecret);
        AuthenticationContext authContext = new AuthenticationContext(authority,true);

        var token = authContext.AcquireTokenAsync(AzureResourceID, credential).Result.AccessToken;
        return token.ToString();
    }

如果我从授权字符串的末尾剥离 V2.0,应用程序将成功返回 V1.0 访问令牌。

如何获得 V2.0 令牌?

【问题讨论】:

  • 你的代码中AzureResourceID的值是多少?
  • 我正在尝试从 Azure Web 应用连接到 Azure SQL 数据库,使用基于登录到 Azure Web 应用的 Azure AD 用户的委托访问。
  • AzureResourceID="database.windows.net"
  • 还有其他问题吗?如果没有,请accept it as answer

标签: c# azure active-directory azure-webapps


【解决方案1】:

您无法从资源https://database.windows.net 获取 v2.0 访问令牌,令牌的版本由资源而非客户端决定。

访问令牌是基于令牌的audience 创建的,在您的情况下为https://database.windows.net,其相关的企业应用程序是Azure SQL Database,其Application ID022907d3-0f1b-48f7-badc-1ba6abab6d66,它是您的客户端请求令牌的资源,其accessTokenAcceptedVersionnull,如果值为null,则该参数默认为1,表示您可以从该资源中获取v1.0令牌,无论v1.0还是v2您在授权中使用的 .0 端点。

见 - https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens

【讨论】:

  • 所以,我做了更多的挖掘工作,现在我意识到问题不在于令牌版本。它没有什么。当我创建应用服务并启用身份验证以使用 Azure Active Directory 登录时,我使用了 Azure 应用服务的快速入门。这确实强制身份验证成功,但我现在怀疑,当我使用上面的代码获取访问令牌时,它正在生成一个新的并且它没有使用登录中的经过身份验证的用户。如果我是一个赌徒,我会说它可能使用匿名用户。
  • 我知道问题不在于我用来登录的用户。这是所有内容的管理员帐户。数据库中有一个登录名和用户与之关联,我已在 Azure AD 中的应用注册中为该应用启用了对 Azure SQL 的委派。
  • 我曾想过,因为我最初使用 V2 身份验证(这就是快速入门构建的内容)进行身份验证,所以我需要一个 V2 访问令牌,而这正是我认为的绊脚石。当我使用令牌连接到 azure db 时,我尝试修复的错误是“用户 '' 登录失败”。我认为问题出在令牌版本上,但现在我很确定我在叫错树。我认为问题在于我得到的令牌上的用户签名。
猜你喜欢
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-10
相关资源
最近更新 更多