寻求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
相关产品推荐
相关产品推荐

