【问题标题】:Azure B2C client credentials grantAzure B2C 客户端凭据授予
【发布时间】:2017-03-11 16:12:49
【问题描述】:

我已经为用户登录/注销实现了 Azure B2C,并且可以获取 id_token 并将其传递给我的 Web API 进行授权,一切正常。 现在,我有一些 Web API 方法只能由客户端 Web 应用程序 (ASP.NET 4.6) 访问,这意味着 OAuth 2.0“客户端凭据授予”。我做了很多研究,我能找到的最接近的是this quick-start,它在 B2C 应用程序中使用 ADAL 来调用 Graph API。

我跟随并到达了我试图获取客户端访问令牌的地步,如下面的代码所示。但是,无论我将什么作为资源传递给 AcquireToken 方法,我都会不断收到错误消息,即我传递的应用程序名称在租户中不存在。 我实际上不确定我应该通过什么,因为在 B2C 世界中,您不会将 Web API 注册为应用程序,而是您的所有应用程序都有一个应用程序 ID。

是否支持上述场景,我该怎么做?

public async Task<string> SendGraphGetRequest(string api, string query)
{
    // First, use ADAL to acquire a token by using the app's identity (the credential)
    // The first parameter is the resource we want an access_token for; in this case, the Graph API.
    //*** In my case I want to replace the graph API URL with my own WebAPI
    AuthenticationResult result = authContext.AcquireToken("https://graph.windows.net", credential);

【问题讨论】:

标签: azure azure-ad-b2c


【解决方案1】:

现在可以在 Azure ADB2 中使用 OAuth2 客户端凭据授权类型。

虽然 Azure AD B2C 身份验证服务当前不直接支持 OAuth 2.0 客户端凭据授予流程,但您可以使用 Azure AD 和 Microsoft 身份平台/令牌端点为 Azure AD B2C 中的应用程序设置客户端凭据流租户。 Azure AD B2C 租户与 Azure AD 企业租户共享一些功能

这是一个 curl 请求示例:

    curl --location --request POST 'https://login.microsoftonline.com/{client-id-of-app-registered-in-b2c}/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: x-ms-gateway-slice=prod; stsservicecookie=ests; fpc=AmqL7OwikMNGgdpvjdkb0OLnguDtAQAAABl14NYOAAAAd_wwNgEAAABCeeDWDgAAAA' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'client_secret={secret-of-app}' \
--data-urlencode 'client_id={client-id-of-app-registered-in-b2c}' \
--data-urlencode 'scope=https://graph.microsoft.com/.default'

请注意,参数是在正文中编码的。

【讨论】:

  • 我认为这行不通。如果您将应用注册的 client_id 放入 URL,Azure 会告诉您它不知道您询问的是哪个租户。
  • 无需对所有内容进行 urlencode。只需将其用于具有特殊字符的数据,例如“&”等
【解决方案2】:

请参阅描述 Azure Active Directory B2C 限制的 this link。您引用的快速入门使用的是客户端凭据授予,Azure AD B2C 尚不支持。

守护程序/服务器端应用程序部分下,它显示:

“包含长时间运行的进程或在没有用户在场的情况下运行的应用程序也需要一种访问安全资源的方法,例如 Web API。这些应用程序可以通过使用应用程序的身份(而不是OAuth 2.0 客户端凭据流中的消费者委托身份)。此流程在 Azure AD B2C 中尚不可用,因此目前,应用程序只能在交互式消费者登录流程发生后才能获取令牌。”

我相信此功能(oauth 客户端凭据授予类型支持)已在 B2C 路线图上,并且在发布后,该快速入门中的步骤应该会起作用。

【讨论】:

  • 感谢 @anderly 提供确认 Azure B2C 尚不支持此工作流的链接
  • 当然可以。我知道这很令人困惑,因为他们有一个快速启动示例,应该可以工作。我的猜测是它可能很快就会到来。我也很期待。
【解决方案3】:

这是一个很好的documented limitation,我在feedback portal上创建了用户语音请求。

您可以投票并等待开发团队实施。

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 2021-10-25
    • 1970-01-01
    • 2020-11-18
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多