我从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
时,我看不到范围,我确实看到其他声明就好了。
我应该从哪里开始研究这个问题?
更新
我已经确定了如何在这种情况下结束,但目前仍不清楚原因:
用户通过以下网址进行身份验证,例如: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
成功验证后,用户被重定向到https://UIAPP.azurewebsites.net/.auth/login/aad/callback
,按照定义,BUT会立即重定向回验证系统,默认范围设置为“openid + profile + email”,即{{1}等URL }}
如果我将第一次回调中的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中间件,它可以正常工作。