在Azure AD身份验证后执行代码

问题描述 投票:1回答:1

我能够让这个例子工作https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-webapp-openidconnect-aspnetcore/

我的问题是如何在身份验证后做一些额外的事情。例如,在典型的登录页面上,在验证后的POST中,我可以为用户设置日志记录或设置其他cookie。

使用Azure AD集成时,我不确定将用户身份验证后应该执行的代码放在何处。回复URL(回调路径)不能用于此目的(我尝试将我的自定义页面放在这里,它确实没有被执行。显然,中间件为该端点创建了一条特殊的路径,以便它可以处理登录令牌数据)

任何帮助表示赞赏!

asp.net-core azure-active-directory oidc
1个回答
1
投票

有一些OpenIdConnectEvents可用于使开发人员控制身份验证过程。

例如,如果协议消息中存在授权代码,则在安全令牌验证后调用OnAuthorizationCodeReceived。该事件可用于获取访问令牌以使用代码/混合流中的ADAL / MSAL使用授权代码访问API:

private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedContext context)
{
    // Acquire a Token for the Graph API and cache it using ADAL. In the TodoListController, we'll use the cache to acquire a token for the Todo List API
    string userObjectId = (context.Principal.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;
    var authContext = new AuthenticationContext(context.Options.Authority, new NaiveSessionCache(userObjectId, context.HttpContext.Session));
    var credential = new ClientCredential(context.Options.ClientId, context.Options.ClientSecret);

    var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(context.TokenEndpointRequest.Code,
        new Uri(context.TokenEndpointRequest.RedirectUri, UriKind.RelativeOrAbsolute), credential, context.Options.Resource);

    // Notify the OIDC middleware that we already took care of code redemption.
    context.HandleCodeRedemption(authResult.AccessToken, context.ProtocolMessage.IdToken);
}

代码示例链接:Calling a web API in an ASP.NET Core web application using Azure AD

OnTokenValidated可用于在身份验证期间向用户添加自定义声明,pelase检查上述文档以获取更多事件。

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