是否可以使用内置的身份验证/授权选项来保护Azure中的App Service中的Web API,并同时使用OAuth客户端凭据授予流对其进行访问?
我有一个通过Azure AD B2C进行身份验证的应用程序服务。在该B2C租户中,我已注册了Web应用程序/ API,并且可以正常使用Web应用程序进行身份验证。 我在该AD B2C应用程序的“发布的范围”部分中添加了一个范围,并且还为该范围添加了一个应用程序ID URI。 然后,我在租户中创建了另一个应用程序(ClientApp),以表示我想提供对第一个API的访问的另一项服务。我为此生成了一个密钥,并且还在API访问部分中添加了我在其他应用程序中创建的范围。
然后在邮递员中,我使用下一个
获得令牌我成功获得了令牌,但是当我尝试通过邮递员使用不记名令牌访问网站时,我只会得到401。
答案 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用作范围...