如何在Unity项目中通过Microsoft Graph登录接入Azure服务?
Unity接入Microsoft Graph实现Azure身份认证落地指南
可用的适配开发包
- 首选微软官方的Azure Identity for Unity包,是专门适配Unity runtime的身份认证库,支持.NET Standard 2.0,兼容Unity 2020.3及以上版本,内置MSAL(微软身份验证库)的Unity适配层,不需要自行迁移桌面版C#的MSAL代码
- 如果面向移动端/WebGL平台开发,可以选用Unity官方Azure插件库中的Azure Active Directory Authentication模块,已经完成各平台原生权限适配,iOS的ASWebAuthenticationSession、安卓的Custom Tabs都不需要自行封装
现有桌面C#代码迁移核心注意事项
你已经拥有可用的桌面端C#示例,迁移时重点规避以下问题即可:
- 不要直接使用桌面版的
InteractiveBrowserCredential,Unity runtime不支持默认系统浏览器回调绑定,要替换成Unity适配版的UnityInteractiveBrowserCredential,回调地址统一使用http://localhost或者Unity专属的自定义协议头,注意和Azure端配置的重定向URI保持一致 - 线程适配:桌面C#示例的异步
await上下文多为控制台/WinUI线程,Unity的主线程仅能在生命周期函数内访问,所有Graph调用的异步结果需要通过UnityMainThreadDispatcher抛回主线程后,再处理UI或游戏逻辑 - 依赖冲突处理:如果项目中已经引入Newtonsoft.Json,需要把Azure Identity包自带的Newtonsoft.Json引用排除,改用Unity官方提供的
com.unity.nuget.newtonsoft-json包,避免版本冲突报错
最小可运行实现流程
已完成Azure端配置的前提下,仅需要修改以下几步即可跑通基础登录流程
- 导入适配的Azure Identity for Unity包后,先在Player Settings中将API兼容级别调整为*.NET Standard 2.1*,开启
Allow 'unsafe' code权限(部分加密逻辑需要) - 身份凭证初始化参考代码:
using Azure.Identity.Unity; using Microsoft.Graph; // 挂载到场景常驻的MonoBehaviour上 private GraphServiceClient _graphClient; void Start() { var credential = new UnityInteractiveBrowserCredential(new UnityInteractiveBrowserCredentialOptions { ClientId = "替换为Azure端注册的客户端ID", TenantId = "替换为你的租户ID", RedirectUri = new Uri("替换为Azure端配置的重定向地址") }); _graphClient = new GraphServiceClient(credential, new[] {"User.Read"}); } // 绑定到登录按钮的点击事件 public async void OnLoginClicked() { try { // 请求用户信息完成身份校验 var user = await _graphClient.Me.GetAsync(); // 实际使用时可将结果抛回主线程处理,比如显示用户名、写入本地缓存 UnityEngine.Debug.Log($"登录成功:{user.DisplayName}"); } catch (AuthenticationFailedException ex) { UnityEngine.Debug.LogError($"登录失败:{ex.Message}"); } }
- 打包前对应平台做权限配置:安卓端添加INTERNET权限,iOS端在info.plist中添加重定向协议白名单,WebGL需要在Azure端配置对应跨域CORS规则
内容的提问来源于stack exchange,提问作者Jarno
相关产品推荐
相关产品推荐

