在Unity中使用Microsoft身份验证库(MSAL)以在iOS应用程序中实现SSO

tjrkku2a  于 2023-08-08  发布在  iOS
关注(0)|答案(4)|浏览(135)

我们为公司开发了一系列增强现实应用程序。这些应用程序基于游戏引擎Unity(目前版本为2020.3.7f1)。现在,我们面临的问题是,我们希望在我们的应用程序中实现SSO方法,这样我们公司的每个成员都可以使用他的公司用户凭据进行身份验证。为了对用户进行身份验证,我们希望/必须使用Microsoft身份平台以及Microsoft身份验证库(MSAL)。
我们已经在Azure上创建了一个客户端,其中包含客户端ID、重定向URI、授权URI、端点、租户等,并且已经通过了微软官方样本项目(https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-ios)的测试。
但是现在我们在Unity中建立这个过程的点上卡住了。我们创建了MSAL库dll(https://github.com/AzureAD/microsoft-authentication-library-for-dotnet),将其导入Unity并使用命名空间Microsoft. Identity. Client调用它。由于安全原因,我们只允许使用PublicClientApplicationBuilder(这是完全有意义的),所以我们需要基于Web的登录屏幕。问题是,我们无法在Unity中实现一个Web视图,用户可以登录到Microsoft,我们可以将接收到的令牌从Web视图解析到我们的应用程序中,以进行进一步的通信。
我们做了大量的互联网研究来寻找解决方案,但只有一些关于Unity中的MSAL与Android结合的帖子,以及其他引用我之前提到的git repos的帖子。
如何在Unity中为iOS设备使用MSAL?
示例代码:

IPublicClientApplication PublicClientApp = PublicClientApplicationBuilder
        .Create(kClientID)
        .WithRedirectUri(kRedirectUri)
        .WithAuthority(new Uri(kAuthority))
        .Build();
 IEnumerable<string> scopes = new List<string> { "https://graph.microsoft.com/.default" };
 AuthenticationResult result;
 result = await PublicClientApp.AcquireTokenInteractive(scopes)
                   .ExecuteAsync();

 result = await PublicClientApp
        .AcquireTokenInteractive(scopes)
        .WithParentActivityOrWindow(new object)
        .ExecuteAsync();

 Debug.Log(result.AccessToken);

字符串

cwdobuhd

cwdobuhd1#

我们通过使用以下资产来做到这一点:UnitySafariViewController
它在Unity中打开Safari ViewController,并支持包含授权代码的回调。一旦你收到了授权码,其他一切(请求令牌等)都可以通过Unity WebRequest完成。请记住,要将iOS上的代理的redirect uri添加到Info.plist中。
最重要的环节:The auth flow

cl25kdpy

cl25kdpy2#

移动的的标准解决方案是AppAuth模式,它涉及使用集成的系统浏览器来登录用户。请参阅this code example article了解其外观,以便了解所需的行为。
因此,看起来他们在iOS上要做的关键事情是避免通过web视图登录,并告诉MSAL使用ASWebAuthenticationSession窗口-this Microsoft article解释了如何操作。

mefy6pfw

mefy6pfw3#

您可以将Microsoft身份平台OAuth 2.0与设备登录一起使用。它被设计用于输入受限的应用程序(如Unity应用程序)和设备。Here您可以找到它的文档。
例如,AltspaceVR(一个Unity应用程序)正在其Mac和Quest2版本中使用该功能。

相关问题