C# 使用Azure AD auth获取承载访问令牌以访问o365资源

C# 使用Azure AD auth获取承载访问令牌以访问o365资源,c#,azure-active-directory,microsoft-graph-api,asp.net-core-2.1,C#,Azure Active Directory,Microsoft Graph Api,Asp.net Core 2.1,我正在使用bog标准,file->new Asp.Net核心Web应用程序(Razor Pages)项目,并将其配置为对o365实例使用Azure AD身份验证,效果很好 我现在想使用该应用程序使用Graph API访问o365资源(例如我的日历)。在asp.net core 2.0中,我使用所描述的方法获取访问令牌,缓存它,并为任何图形请求检索它。它依赖OpenIdConnect事件(OnAuthorizationCodeReceived)获取访问代码 在使用asp.net core 2.1的

我正在使用bog标准,file->new Asp.Net核心Web应用程序(Razor Pages)项目,并将其配置为对o365实例使用Azure AD身份验证,效果很好

我现在想使用该应用程序使用Graph API访问o365资源(例如我的日历)。在asp.net core 2.0中,我使用所描述的方法获取访问令牌,缓存它,并为任何图形请求检索它。它依赖OpenIdConnect事件(OnAuthorizationCodeReceived)获取访问代码


在使用asp.net core 2.1的新AddAzureAd方法上,我没有看到任何类似的事件。现在是否有一种新的方法来获取用于图形调用的令牌?

这一直是一个复杂的问题,根据您的场景(所需的权限、您正在谈论的工作负载),可能需要调整此答案。 首先,在这里,您有代码授权和id_令牌。实现您想要实现的目标的最简单方法(就用户体验而言可能不是最好的)是临时存储id令牌。(比如在令牌缓存中)


您可以看到一个示例,您还需要确保您的应用程序配置了正确的配置,并且您应该准备就绪

感谢您的回答-我在使用Core2.0时使用了与您的回答类似的东西,但我现在使用的是2.1 AddAzureAd方法(而不是AddOpenIdConnect方法),但它的options参数上似乎没有events方法。因此,我想知道是否有一种新的方法来获取身份验证代码/令牌,或者是否需要恢复使用AddOpenIdConnect方法。您看过了吗?我相信现在是
IGraphAuthProvider
IGraphSdkHelper
为您准备好了GraphClient。
services.AddAuthentication()
    .AddOpenIdConnect(opts =>
    {
        opts.Events = new OpenIdConnectEvents
    {
        OnAuthorizationCodeReceived = ctx =>
        {
            return Task.CompletedTask;
        }
    };
    });