You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:23:58