我的问题是身份验证后如何做其他事情。例如,在典型的登录页面上,在验证后的POST中,我可以为用户设置日志记录或设置其他cookie。
通过Azure AD集成,我不确定将仅在用户经过身份验证后才应执行的代码放在何处。回复URL(回叫路径)不适用于此目的(我尝试将自定义页面放在此处,但实际上并没有得到执行。显然,中间件为此端点创建了一条特殊的路由,以便它可以处理登录令牌数据)
感谢您的帮助!
答案 0 :(得分: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
可用于在身份验证期间向用户添加自定义声明,请在文档上方进行检查以获取更多事件。