[在Unity3D中使用MSAL .NET库时,窗口提示不显示

问题描述 投票:3回答:2

我正在尝试通过MSAL库(Microsoft Identity Platform)使用Unity应用程序登录到SharePoint。第一次运行时,我完全看不到弹出窗口,也没有错误。 (请注意,我已经在Editor中作为独立的exe进行过尝试)

但是,我在第二次运行后确实注意到了,我看到一个弹出窗口,标题为Oops,消息为Could not register the window class win32 error 0。经过一番谷歌搜索后,我认为可能是因为第一次尝试后,我需要以某种方式清理后,背景中某处有一个悬空窗口。如果重新启动Unity,我可以再次运行,并且第一次没有错误,但是没有弹出窗口。当然,如果第二次运行,我会再次收到Oops消息。

可能不相关,但值得注意的是,如果我在Oops窗口中单击“确定”,则会出现空异常错误。看来AcquireTokenInteractive试图打开一个失败的窗口,将其保留为空,然后尝试从空中获取令牌。

非常感谢您提供任何有助于弄清楚为什么窗口不显示的建议

using Microsoft.Identity.Client;

public class MyApp: MonoBehaviour
{
    private string ClientId = "i-am-not-telling";
    private string Tenant = "common";

    void Start()
    {
        SharepointLogin();
    }

    public async void SharepointLogin()
    {
        PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
                .WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
                .Build();
        IEnumerable<string> scopes = new List<string> { "User.Read" };
        AuthenticationResult result;
        result = await PublicClientApp.AcquireTokenInteractive(scopes)
                        .ExecuteAsync();
    }
}

unity3d sharepoint-online msal
2个回答
0
投票

您是否尝试过将父窗口提供给Builder?在Unity中,获取Window句柄有点困难,但是此代码可能有效并且可能解决了问题。

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern System.IntPtr GetActiveWindow();

public static System.IntPtr GetWindowHandle() {
  return GetActiveWindow();
}

然后用WithParentActivityOrWindow调用它>

public async void SharepointLogin()
{
    PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
        .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
        .WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
        .WithParentActivityOrWindow(GetWindowHandle)
        .Build();
    IEnumerable<string> scopes = new List<string> { "User.Read" };
    AuthenticationResult result;
    result = await PublicClientApp.AcquireTokenInteractive(scopes)
        .ExecuteAsync();
}
    

0
投票

我相信这是Unity或MSAL库之间的错误。我将向两者提交错误报告并等待修复。此方法暂时无法使用。我将不得不使用其他方法进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.