我已经为用户登录/注销实现了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);
答案 0 :(得分:5)
这是一个很好的documented limitation,我在feedback portal上创建了用户语音请求。
您可以投票并等待开发团队实施它。
答案 1 :(得分:4)
请参阅描述Azure Active Directory B2C限制的this link。您引用的快速启动是使用Azure AD B2C尚不支持的客户端凭据授权。
在守护程序/服务器端应用程序部分下面显示:
“包含长时间运行的进程或在没有用户的情况下运行的应用程序也需要一种方法来访问安全资源,例如Web API。这些应用程序可以通过使用应用程序的身份进行身份验证和获取令牌(而不是OAuth 2.0客户端凭据流中的消费者委托身份。此流程尚未在Azure AD B2C中提供,因此,目前,应用程序只有在发生交互式消费者登录流后才能获取令牌。“
我相信这个功能(oauth客户端凭据授予类型支持)在B2C路线图上,当它发布时,快速启动的步骤应该有效。
答案 2 :(得分:1)
现在可以在Azure ADB2中使用OAuth2客户端凭据授予类型。
尽管Azure AD B2C身份验证服务当前不直接支持OAuth 2.0客户端凭据授予流,但是您可以使用Azure AD和Microsoft Identity Platform /令牌终结点为Azure AD B2C中的应用程序设置客户端凭据流承租人。 Azure AD B2C租户与Azure AD企业租户共享某些功能
这是一个示例卷曲请求:
TypeError: _this.setState is not a function. (In '_this.setState({
fname: nextValue
})', '_this.setState' is undefined)
请注意,参数是在主体中编码的。