Xamarin Forms应用连接b2clogin进行B2C账户登录注册时出现404错误
我帮你梳理几个最可能导致这个404错误的原因,都是迁移到b2clogin.com和MSAL 3.0时容易踩的坑:
权威端点(Authority)格式错误
你当前把B2C策略名作为查询参数?p={SignUpAndInPolicy}拼接在发现文档URL末尾,这是不正确的。Azure B2C的OpenID发现文档要求策略名放在URL路径中,而非查询参数。错误的端点格式会让B2C服务找不到对应的配置,直接返回404。你的当前代码:
static readonly string AuthorityBase = $"https://{AppName}.b2clogin.com/{Tenant}/v2.0/.well-known/openid-configuration"; static readonly string Authority = $"{AuthorityBase}?p={SignUpAndInPolicy}";修正后的正确构造方式(直接把策略名放入路径):
static readonly string Authority = $"https://{AppName}.b2clogin.com/{Tenant}/{SignUpAndInPolicy}/v2.0/.well-known/openid-configuration";更省心的方式是让MSAL自动处理权威URI的拼接,直接传递租户和策略名给
WithB2CAuthority:.WithB2CAuthority($"https://{AppName}.b2clogin.com/{Tenant}/{SignUpAndInPolicy}")MSAL会自动生成正确的发现文档路径,避免手动拼接出错。
重定向URI与Info.plist配置不匹配
你提到Info.plist中配置的是msauth.com.[MYAPPID]://auth,但代码里的RedirectUrl是msauth.********://auth,这里的占位符部分必须和你的应用Bundle ID完全一致。比如如果你的Bundle ID是com.mycompany.myapp,重定向URI就应该是msauth.com.mycompany.myapp://auth。不一致的重定向URI不仅会导致回调失败,也可能在端点验证阶段触发异常。租户域名或策略名拼写错误
仔细检查这两处细节:{AppName}.b2clogin.com中的AppName必须和你的Azure B2C租户短名称一致(比如租户是myappname.onmicrosoft.com,短名称就是myappname);- 策略名
B2C_1_SignUp_SignIn必须和Azure B2C门户中创建的策略名称完全匹配,大小写、下划线都不能出错。任何拼写错误都会导致B2C找不到对应的策略配置,返回404。
MSAL 3.0的B2C初始化方式问题
迁移到MSAL 3.0后,确保你使用的是适配B2C的初始化方法。WithB2CAuthority需要符合格式的权威URI,如果你手动构造的URI不符合MSAL 3.0的预期,也会触发请求错误。建议使用更简洁的初始化代码,比如:msaClient = PublicClientApplicationBuilder.Create(ClientID) .WithIosKeychainSecurityGroup("com.microsoft.adalcache") // 推荐使用默认组保证兼容性,如需自定义要确保配置一致 .WithB2CAuthority($"https://{AppName}.b2clogin.com/{Tenant}/{SignUpAndInPolicy}") .WithRedirectUri(RedirectUrl) .Build();
内容的提问来源于stack exchange,提问作者Tom

