【问题标题】:How do request a correct access token in ASP.NET Core for Azure AD to access Microsoft Graph如何在 ASP.NET Core 中为 Azure AD 请求正确的访问令牌以访问 Microsoft Graph
【发布时间】:2018-04-01 07:38:59
【问题描述】:

我有一个使用 ASP.NET Core Identity 的 ASP.NET Core 应用程序并尝试针对 Azure AD 进行身份验证。

services.AddAuthentication()
    .AddOpenIdConnect("AzureAD", "Azure AD", option =>
    {
        option.ClientId = Configuration["AzureAD:AppId"]; 
        option.ClientSecret = "abc";
        option.Authority = string.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAd:Tenant"]);
        option.SignedOutRedirectUri = Configuration["AzureAd:PostLogoutRedirectUri"];
        option.ResponseType = OpenIdConnectResponseType.CodeIdToken;
        option.SaveTokens = true;
        option.SignInScheme = IdentityConstants.ExternalScheme;
        option.Events = new OpenIdConnectEvents
        {
            OnRemoteFailure = OnAuthenticationFailed,                       
        };
    });

一切正常,用户可以使用其凭据登录。

现在我正在尝试访问 Microsoft Graph 以接收用户的电子邮件地址(它不是作为 id_token 中的声明发送的)。 但是,当我使用从登录流程接收到的 access_token 时,Graph aAPI 会返回错误:

Code: InvalidAuthenticationToken
Message: CompactToken parsing failed with error code: -2147184105

当我查看 access_token 时,它看起来很奇怪。它不是有效的 JWT。 AQABAAAAAABHh4kmS_aKT5XrjzxRAtHzymKlkayx9UvCfyg_uHq1prmSP8f0Mi5BfiqkdIZeqJsBbm9SSbDbMrQ0JgNa6pa6M97IjVr6ZHdtt3ryT8vns_kz5BxkdJFkL79Ql3ywzyKldfLuX9jwq1eCgQ1MMdqKUDW4q5g38...

我做错了什么?

【问题讨论】:

    标签: c# azure oauth-2.0 azure-ad-graph-api asp.net-core-2.0


    【解决方案1】:

    您需要使用 OnAuthorizationCodeReceived 通知,该通知可用于使用 ADAL/MSAL 获取 microsoft graph api 的访问令牌。 ASP.NET Core 2.0 Azure AD 认证请参考this blog

    【讨论】:

    • 谢谢,有帮助。现在我有一个“真正的”访问令牌。您的GitHub repo 代码示例也帮助了我。尤其是获取 Microsoft Graph 的特殊访问令牌。
    • 请考虑接受作为答案,这可能会帮助遇到同样问题的其他人。
    猜你喜欢
    • 2020-07-05
    • 2018-04-26
    • 1970-01-01
    • 2023-02-24
    • 2023-03-23
    • 1970-01-01
    • 2021-01-22
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多