AAD B2C中具有客户端凭据的Azure App Service轻松身份验证授予流程

时间:2018-12-14 21:04:11

标签: azure azure-ad-b2c

是否可以使用内置的身份验证/授权选项来保护Azure中的App Service中的Web API,并同时使用OAuth客户端凭据授予流对其进行访问?

我有一个通过Azure AD B2C进行身份验证的应用程序服务。在该B2C租户中,我已注册了Web应用程序/ API,并且可以正常使用Web应用程序进行身份验证。 我在该AD B2C应用程序的“发布的范围”部分中添加了一个范围,并且还为该范围添加了一个应用程序ID URI。 然后,我在租户中创建了另一个应用程序(ClientApp),以表示我想提供对第一个API的访问的另一项服务。我为此生成了一个密钥,并且还在API访问部分中添加了我在其他应用程序中创建的范围。

然后在邮递员中,我使用下一个

获得令牌

我成功获得了令牌,但是当我尝试通过邮递员使用不记名令牌访问网站时,我只会得到401。

3 个答案:

答案 0 :(得分:0)

不支持对AAD B2C应用程序注册使用client_credentials流。因此,您必须改为通过普通的Azure AD Blade创建应用注册。
https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-apps#current-limitations

然后,App Service必须接受来自2个不同机构的令牌,App Services无法使用EasyAuth(在App Service配置菜单中启用身份验证)来执行此操作。

您将需要使用一个可以接受来自多个授权机构的令牌的库。这里有一个例子:
Use multiple JWT Bearer Authentication

答案 1 :(得分:0)

我已经花了几个小时来找到合适的解决方案。

此解决方案:https://stackoverflow.com/a/48657826/11721142不适用于我的B2C设置(几乎是理想的:))。我必须更改原始文件:

"additionalLoginParams": [
  "response_type=code id_token",
  "resource=<AAD-app-id-for-your-webapi-webapp>"
]

收件人:

"additionalLoginParams": [
  "scope="scope=https://xxx.onmicrosoft.com/{Guid}/all+openid+offline_access""
]

哪里

https://xxx.onmicrosoft.com/{Guid}/all是您在B2C API权限中定义的范围标识符

然后...最后我可以打电话给{frontend-app-domain}/.auth/login/aad,然后...看到:{frontend-app-domain}/.auth/me之后的访问令牌,id令牌和刷新令牌

您还可以提供所需的范围,例如:{frontend-app-domain}/.auth/login/aad?scope=<see scopes above>

答案 2 :(得分:-1)

不确定我是否理解正确,但是似乎您使用的是URL作为范围。如果将范围设置为应用程序服务的应用程序ID(您可以在azure AD中找到具有应用程序服务的名称的企业应用程序)而不使用URL,则该方法有效。 (格式:/。default)

我仍在尝试确定是否可以将URL用作范围...