Azure App Services结合Azure AD B2C使用MobileServiceClient认证失败
解决Azure App Service + AD B2C 中MobileServiceClient.login的权限问题
我来帮你梳理下这个问题的核心原因和解决办法:
关键误区:access_token参数填错了
你之前把AD B2C应用的Client ID填进去是不对的——mobileClient.login('aad', {'access_token': ...})里的access_token,需要的是用户通过AD B2C认证成功后拿到的有效用户令牌(ID Token或Access Token),而不是应用本身的Client ID。
两种正确的实现方式
方式一:让SDK自动处理登录流程(推荐)
既然你直接访问https://{myfunctionapp}.azurewebsites.com/.auth/login/aad能正常跳转登录,说明App Service的AD B2C配置是没问题的。你完全可以不用手动传Token,让MobileServiceClient SDK帮你处理整个登录跳转和令牌获取流程:
function callEmailLogin() { var functionAppBaseUrl = 'https://<myfunctionapp>.azurewebsites.com'; var mobileClient = new WindowsAzure.MobileServiceClient(functionAppBaseUrl); // 传入你的AD B2C登录策略名,比如默认的B2C_1_signupsignin mobileClient.login('aad', {policy: '你的B2C登录策略名称'}) .done(function (results) { log('You are now logged in as: ' + results.userId); emailLink.innerText = 'Sign-out'; }, function (err) { log(err); emailLink.innerText = 'Sign-in/Sign-up'; }); }
这样调用后,SDK会自动跳转到AD B2C的登录/注册页面,用户完成认证后会自动回到你的页面,同时SDK会获取到有效的令牌并完成登录,不会再出现权限错误。
方式二:手动传入已获取的用户令牌(特殊场景)
如果你确实需要从其他渠道获取用户令牌后手动传入,要注意这几点:
- 必须传入AD B2C颁发的有效JWT令牌(可以是ID Token,也可以是针对你的App Service的Access Token)
- 令牌的受众(
aud字段)必须匹配你的App Service的客户端ID - 令牌不能过期,且签名必须是AD B2C合法签名的
你可以通过AD B2C的标准授权流程获取到符合要求的令牌,再传入mobileClient.login。
额外排查小提示
- 检查你的App Service AD B2C配置里,是否正确设置了允许的令牌受众,确保令牌的
aud值和App Service的客户端ID一致 - 确认AD B2C里的应用配置,已经把你的前端页面地址添加到了允许的重定向URI列表中
内容的提问来源于stack exchange,提问作者David Torres
相关产品推荐
相关产品推荐

