【问题标题】:AcquireTokenSilentAsync fails to authenticate userAcquireTokenSilentAsync 无法验证用户身份
【发布时间】:2018-05-14 17:42:48
【问题描述】:

我正在尝试获取静默令牌请求来初始化 ConfidentialClientApp 对象,就像在“Microsoft Graph SDK ASPNET Connect”项目中一样,并在 Add sign-in with Microsoft to an ASP.NET web app 中进行了概述

通过我的代码镜像上面的示例,我希望我的调用将返回一个成功的结果,并且可以访问。

var result = await cca.AcquireTokenSilentAsync(graphScopes, cca.Users.First());

return result.AccessToken;

但是,我收到一条错误消息,提示用户需要进行身份验证。我不确定在这些例子中我遗漏了什么。

【问题讨论】:

    标签: asp.net-mvc microsoft-graph-api msal


    【解决方案1】:

    如果该用户已经有一个包含您请求的范围的缓存令牌,您只能静默获取该令牌(它可以有更多,但它至少需要具有您所要求的范围)。

    这就是为什么AcquireTokenSilentAsync 应该始终包装在 Try/Catch 块中的原因。如果找不到匹配的令牌,则需要启动交互式流程。以下是来自MSAL Wiki 的示例:

    AuthenticationResult result = null;
    try
    {
        result = await app.AcquireTokenSilentAsync(scopes, app.Users.FirstOrDefault());
    }
    catch (MsalUiRequiredException ex)
    {
        // A MsalUiRequiredException happened on AcquireTokenSilentAsync. 
        // This indicates you need to call AcquireTokenAsync to acquire a token
        System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
    
        try
        {
            result = await app.AcquireTokenAsync(scopes);
        }
        catch (MsalException msalex)
        {
            ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
        }
    }
    catch (Exception ex)
    {
        ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
        return;
    }
    
    if (result != null)
    {
        string accessToken = result.AccessToken;
        // Use the token
    }
    

    【讨论】:

    • 对此进行了一些调整,我能够让我的工作流程达到预期的行为。谢谢
    • 嗨,Marc,对于 aspnetcore Web 应用程序,您将如何做到这一点?
    猜你喜欢
    • 2019-05-02
    • 2016-09-09
    • 2015-06-20
    • 1970-01-01
    • 2019-08-24
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    相关资源
    最近更新 更多