B2C应用范围不适用于API应用

时间:2018-04-09 16:19:56

标签: azure-web-sites azure-ad-b2c

我从API网络应用程序中获得了单独的UI Web应用程序。两者都在B2C中注册为应用程序。我已经在UI Web应用程序上启用了Azure应用服务身份验证/授权(简单身份验证),并配置了API Web应用程序以使用JwtBearer中间件来验证对API的调用。

这似乎有效,但我无法将范围扩展到API网络应用程序。我已在API应用程序中发布了范围,并将UI应用程序配置为可以访问这些范围。

我尝试了不同的登录网址选项,例如https://myUIapp.azurewebsites.net/.auth/login/aad?p=b2c_1a_mysigninpolicy&scope=openid+https://myb2ctenant.onmicrosoft.com/api/company.read&post_login_redirect_uri=/app

确保API应用“App ID URI”(在B2C应用设置中)确实是“api”,而范围名称是company.read。在成功验证后,转到/.auth/me时,我看不到范围,我确实看到其他声明就好了。

我应该从哪里开始研究这个问题?

更新

我已经确定了如何在这种情况下结束,但目前仍不清楚原因:

  1. 用户通过以下网址进行身份验证,例如:https://login.microsoftonline.com/mydevb2c.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1A_signin&client_id=UIAPP_GUID&nonce=defaultNonce&redirect_uri=https%3A%2F%2FUIAPP.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&scope=openid%20https%3A%2F%2Fmydevb2c.onmicrosoft.com%2Fapi%2Fcompany.write%20https%3A%2F%2Fmydevb2c.onmicrosoft.com%2Fapi%2Fcompany.read&response_type=id_token%20token&prompt=login

  2. 成功验证后,用户被重定向到https://UIAPP.azurewebsites.net/.auth/login/aad/callback,按照定义,BUT会立即重定向回验证系统,默认范围设置为“openid + profile + email”,即{{1}等URL }}

  3. 如果我将第一次回调中的access_token带到https://login.microsoftonline.com/mydevb2c.onmicrosoft.com/oauth2/v2.0/authorize?response_type=id_token&redirect_uri=https%3A%2F%2FUIAPP.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client_id=UIAPP_GUID&scope=openid+profile+email&response_mode=form_post&p=b2c_1a_signinsuomifi&nonce=somenonce&state=redir%3D%252Fapp它包含请求的范围,但第二次认证回调显然没有,因为它请求默认范围设置。

    我是否可能需要通过/.auth/login/aad/callback启动简单的身份验证登录过程,以便它也接受回调?

    更新2

    是的,需要通过.auth/login/aad启动此过程:当使用.auth/login/aad等登录网址时,会删除第二次身份验证重定向。

    现在的问题是,为什么我只能看到https://myUIapp.azurewebsites.net/.auth/login/aad?p=B2C_1A_signin&redirect_uri=https%3A%2F%2FmyUIapp.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&scope=openid%20https%3A%2F%2Fmydevb2c.onmicrosoft.com%2Fapi%2Fcompany.write%20https%3A%2F%2Fmydevb2c.onmicrosoft.com%2Fapi%2Fcompany.read&response_type=id_token%20token&prompt=login&post_login_redirect_uri=/app中的 id_token 而不是 access_token ,而是明确返回.auth/me ?最终:如何使用access_token作为承载令牌,我仍然无法查询简易身份验证的安全API,但得到错误.auth/login/aad/callback?我已按照Azure client app accessing Azure api secured by AD中的步骤进行操作。

    如果我关闭easy auth,并在我的API中使用JwtBearer中间件,它可以正常工作。

0 个答案:

没有答案