Azure B2C客户端凭据授予

zai*_*adi 9 azure azure-ad-b2c

我已经为用户登录/注销实现了Azure B2C,并且可以获取id_token并将其传递给我的Web API进行授权,一切正常.现在,我有一些Web API方法应该只能由客户端Web应用程序(ASP.NET 4.6)访问,这意味着OAuth 2.0"客户端凭据授予".我已经做了很多研究,而我能找到的最接近的是这个快速启动,它在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);
Run Code Online (Sandbox Code Playgroud)

Sal*_*bba 6

这是一个记录良好的限制,我在反馈门户网站上创建了用户语音请求.

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


and*_*rly 5

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

在“ 守护程序/服务器端应用程序”部分中,其内容为:

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

我相信此功能(oauth客户端凭据授予类型支持)已在B2C路线图中,并且在发布时,该快速入门中的步骤应该可以正常工作。


Tai*_* Bo 5

现在可以将 OAuth2 客户端凭据授予类型与 Azure ADB2 结合使用。

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

这是一个示例卷曲请求:

    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'
Run Code Online (Sandbox Code Playgroud)

请注意,参数被编码在主体中。