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

寻求Xamarin.Android与Xamarin.iOS集成Azure AD B2C的方案及文档

我完全懂你的困扰——官方文档里Xamarin.Forms的内容铺天盖地,但Xamarin Native(Android/iOS)集成Azure AD B2C的资料确实少得可怜。不过别担心,核心思路是用**MSAL(Microsoft Authentication Library)**分别针对两个平台做原生实现,这是完全可行的,我下面给你拆解具体步骤:

Xamarin.Android 集成步骤

1. 安装依赖

在你的Xamarin.Android项目里安装NuGet包:Microsoft.Identity.Client

2. 配置AndroidManifest.xml

  • 先添加必要的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  • 接着添加处理认证回调的Intent过滤器,把{YOUR_CLIENT_ID}替换成你Azure AD B2C应用的客户端ID:
<activity
    android:name="microsoft.identity.client.BrowserTabActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- 这里的scheme格式是msal+客户端ID -->
        <data android:scheme="msal{YOUR_CLIENT_ID}" />
    </intent-filter>
</activity>

3. 实现认证逻辑

在你的Activity里初始化MSAL客户端,然后调用交互式认证:

using Microsoft.Identity.Client;

// 初始化客户端
var pca = PublicClientApplicationBuilder
    .Create("{YOUR_CLIENT_ID}")
    .WithB2CAuthority("https://{YOUR_TENANT_NAME}.b2clogin.com/tfp/{YOUR_TENANT_NAME}.onmicrosoft.com/{YOUR_POLICY_NAME}")
    .WithRedirectUri("msal{YOUR_CLIENT_ID}://auth")
    .Build();

// 发起登录请求
var result = await pca.AcquireTokenInteractive(new[] { "https://{YOUR_TENANT_NAME}.onmicrosoft.com/api/scope" })
    .WithParentActivityOrWindow(this)
    .ExecuteAsync();

// 登录成功后,你可以拿到AccessToken:result.AccessToken

4. 处理回调

记得在Activity的OnActivityResult方法里把结果传给MSAL:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);
    AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}
Xamarin.iOS 集成步骤

1. 安装依赖

同样在Xamarin.iOS项目里安装NuGet包:Microsoft.Identity.Client

2. 配置Info.plist

  • 添加URL Scheme,把{YOUR_CLIENT_ID}替换成你的客户端ID:
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>msal{YOUR_CLIENT_ID}</string>
        </array>
    </dict>
</array>
  • 添加支持的外部URL Scheme,确保MSAL能唤起系统浏览器:
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>msauthv2</string>
    <string>msauthv3</string>
</array>

3. 实现认证逻辑

在你的ViewController里初始化MSAL客户端并发起认证:

using Microsoft.Identity.Client;

// 初始化客户端
var pca = PublicClientApplicationBuilder
    .Create("{YOUR_CLIENT_ID}")
    .WithB2CAuthority("https://{YOUR_TENANT_NAME}.b2clogin.com/tfp/{YOUR_TENANT_NAME}.onmicrosoft.com/{YOUR_POLICY_NAME}")
    .WithRedirectUri("msal{YOUR_CLIENT_ID}://auth")
    .Build();

// 发起登录请求
var result = await pca.AcquireTokenInteractive(new[] { "https://{YOUR_TENANT_NAME}.onmicrosoft.com/api/scope" })
    .WithParentViewController(this)
    .ExecuteAsync();

// 成功后获取AccessToken:result.AccessToken

4. 处理回调

在AppDelegate的OpenUrl方法里把URL传给MSAL:

public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
    AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url);
    return true;
}
通用注意事项
  • 确保你在Azure AD B2C租户的应用配置里,把原生平台的重定向URI设置为msal{YOUR_CLIENT_ID}://auth
  • 替换所有占位符:{YOUR_CLIENT_ID}(应用客户端ID)、{YOUR_TENANT_NAME}(B2C租户名称)、{YOUR_POLICY_NAME}(比如默认的B2C_1_SignUpSignIn)、{YOUR_SCOPE}(你要访问的API权限范围)
  • 要实现静默刷新token,可以用AcquireTokenSilent方法,避免每次都唤起登录界面
  • 微软有一个专门的Xamarin Native Azure AD B2C示例项目,里面包含了两个平台的完整实现逻辑,你可以参考其中的代码结构来完善你的集成

内容的提问来源于stack exchange,提问作者Ravi Kanasagra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:10