使用 B2C 租户域时未经授权使用 Azure AD B2C returns 保护的 Azure 函数
Azure functions secured with Azure AD B2C returns unauthorized when using B2C tenant domain
鉴于 https://login.microsoftonline.com/tfp/MyTenantName.onmicrosoft.com/signinsingunp 作为发行者 url 通过 AAD B2C 保护的 azure 功能,我可以通过 msal.js 应用程序成功验证 b2c 用户,
好像我尝试将发行者 url 更新为我的 b2ctenant 域登录名 url(因为这个建议 redirect URLs to b2clogin.com)并更新 msal.js 应用程序中的权限以匹配域(myapp. b2clogin.com/tfp/MyTenantName.onmicrosoft.com/signinsingunp),我收到 401 相同的 azure 函数,任何建议将不胜感激。
下面是详细的设置细节,
- Azure AD B2C 租户
- 域名:MyTenantName.onmicrosoft.com
- 应用:
- 应用程序A-Api
- WebApp/API : 是
- 允许隐式流:是
- 回复Url:https://myazurefunsapi.azurewebsites.net/.auth/login/aad/callback
- 应用程序 ID:https://MyTenantName.onmicrosoft.com/ApplicationA-Api
- 已发布范围:阅读,user_impersonation
- API 访问:访问用户配置文件
- ApplicationB-门户
- WebApp/API : 是
- 允许隐式流:是
- 回复Url:https://myportal.domain.com
- 应用程序 ID:https://MyTenantName.onmicrosoft.com/ApplicationB-Portal
- 发布范围:user_impersonation
- API 访问:ApplicationA-Api(读取,代表登录用户访问此应用程序),访问用户配置文件(offline_access,openid)
- 用户流量
- 注册登录
- 应用程序:应用程序A-Api
- 回复Url:https://myazurefunsapi.azurewebsites.net/.auth/login/aad/callback
- Select 域:
- 我的租户名称。b2clogin.com
- login.microsoftonline.com
- Azure 函数
- Authentication/Authorization
- 应用服务身份验证:开启
- 未通过身份验证时采取的操作:使用 Azure AD 登录
- 身份验证提供商:
- Azure AAD:
- 管理模式:高级
- 客户端 ID:B2C-ApplicationA-ApplicationID
- 发行者url:login.microsoftonline.com/....../opendid......
- 静态网站
- b2c 集成由 msal.js (v0.2.4)
完成
- 客户端 ID : B2C-ApplicationB-ApplicationID
- 权限:https://login.microsoftonline.com/tfp/b2ctenantname.onmicrosoft.com/signinsingunp
- b2cscopes:应用程序A-Api-读取
提前致谢!
您需要做的就是更改 Issuer URL(您写为 Issuer URL 但必须是 .well-known 配置 URL)以匹配 b2clogin.com 域。
从上面我看到你在 Azure 函数中的 OpenID 配置 URL 是
login.microsoftonline.com/......./opendid......
但它应该与您的b2clogin 域的静态网站的.well-known 配置相匹配。应该是
我终于找到了解决办法...
费了一番功夫,就这样了issue raised on GitHub
基本上,我在设置 UserAgentApplication
时更改了权限,以使用其他人提到的新 b2clogin.com 域。
虽然这并没有立即起作用,但我收到了您在评论中提到的相同错误,所以我不得不在我的配置中设置 validateAuthority: false
。
我在下面提供了一个示例,说明我是如何设置我的。我的 ClientID 在 Azure 中与在 MSAL.js
中相同
var msalConfig = {
auth: {
clientId: "xxxx",
authority: "https://xxxx.b2clogin.com/tfp/xxxx.onmicrosoft.com/B2C_xxxx",
webApi: 'https://xxxx.azurewebsites.net',
b2cScopes: this.appConfig.b2cScopes,
validateAuthority: false
},
cache: {
cacheLocation: "localStorage",
storeAuthStateInCookie: true
}
};
this.clientApplication = new Msal.UserAgentApplication(msalConfig);
希望对您有所帮助!
鉴于 https://login.microsoftonline.com/tfp/MyTenantName.onmicrosoft.com/signinsingunp 作为发行者 url 通过 AAD B2C 保护的 azure 功能,我可以通过 msal.js 应用程序成功验证 b2c 用户, 好像我尝试将发行者 url 更新为我的 b2ctenant 域登录名 url(因为这个建议 redirect URLs to b2clogin.com)并更新 msal.js 应用程序中的权限以匹配域(myapp. b2clogin.com/tfp/MyTenantName.onmicrosoft.com/signinsingunp),我收到 401 相同的 azure 函数,任何建议将不胜感激。
下面是详细的设置细节,
- Azure AD B2C 租户
- 域名:MyTenantName.onmicrosoft.com
- 应用:
- 应用程序A-Api
- WebApp/API : 是
- 允许隐式流:是
- 回复Url:https://myazurefunsapi.azurewebsites.net/.auth/login/aad/callback
- 应用程序 ID:https://MyTenantName.onmicrosoft.com/ApplicationA-Api
- 已发布范围:阅读,user_impersonation
- API 访问:访问用户配置文件
- ApplicationB-门户
- WebApp/API : 是
- 允许隐式流:是
- 回复Url:https://myportal.domain.com
- 应用程序 ID:https://MyTenantName.onmicrosoft.com/ApplicationB-Portal
- 发布范围:user_impersonation
- API 访问:ApplicationA-Api(读取,代表登录用户访问此应用程序),访问用户配置文件(offline_access,openid)
- 应用程序A-Api
- 用户流量
- 注册登录
- 应用程序:应用程序A-Api
- 回复Url:https://myazurefunsapi.azurewebsites.net/.auth/login/aad/callback
- Select 域:
- 我的租户名称。b2clogin.com
- login.microsoftonline.com
- 注册登录
- 应用:
- 域名:MyTenantName.onmicrosoft.com
- Azure 函数
- Authentication/Authorization
- 应用服务身份验证:开启
- 未通过身份验证时采取的操作:使用 Azure AD 登录
- 身份验证提供商:
- Azure AAD:
- 管理模式:高级
- 客户端 ID:B2C-ApplicationA-ApplicationID
- 发行者url:login.microsoftonline.com/....../opendid......
- Authentication/Authorization
- 静态网站
- b2c 集成由 msal.js (v0.2.4) 完成
- 客户端 ID : B2C-ApplicationB-ApplicationID
- 权限:https://login.microsoftonline.com/tfp/b2ctenantname.onmicrosoft.com/signinsingunp
- b2cscopes:应用程序A-Api-读取
提前致谢!
您需要做的就是更改 Issuer URL(您写为 Issuer URL 但必须是 .well-known 配置 URL)以匹配 b2clogin.com 域。
从上面我看到你在 Azure 函数中的 OpenID 配置 URL 是
login.microsoftonline.com/......./opendid......
但它应该与您的b2clogin 域的静态网站的.well-known 配置相匹配。应该是
我终于找到了解决办法...
费了一番功夫,就这样了issue raised on GitHub
基本上,我在设置 UserAgentApplication
时更改了权限,以使用其他人提到的新 b2clogin.com 域。
虽然这并没有立即起作用,但我收到了您在评论中提到的相同错误,所以我不得不在我的配置中设置 validateAuthority: false
。
我在下面提供了一个示例,说明我是如何设置我的。我的 ClientID 在 Azure 中与在 MSAL.js
中相同var msalConfig = {
auth: {
clientId: "xxxx",
authority: "https://xxxx.b2clogin.com/tfp/xxxx.onmicrosoft.com/B2C_xxxx",
webApi: 'https://xxxx.azurewebsites.net',
b2cScopes: this.appConfig.b2cScopes,
validateAuthority: false
},
cache: {
cacheLocation: "localStorage",
storeAuthStateInCookie: true
}
};
this.clientApplication = new Msal.UserAgentApplication(msalConfig);
希望对您有所帮助!