我正在使用OWIN WsFederation对用户进行身份验证,我想获取一个声明并执行额外的检查,看看这个唯一的用户id是否位于数据库中以供访问。如果没有,我希望将用户重定向到显示消息的视图。我订阅了一个通知"SecurityTokenValidated",在这个通知中,我将获取声明并检查用户是否存在。根据我的理解,SecurityTokenValidated是在cookie创建后调用的,所以这可能太晚了。
我如何重定向用户到一个视图,让他们知道他们没有访问权?
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = AppSettings.IdpRealm,
MetadataAddress = AppSettings.IdpMetadata,
Notifications = new WsFederationAuthenticationNotifications
{
// check and create additional claims
SecurityTokenValidated = notification =>
{
// identity object to access claims from IDP
var identity = notification.AuthenticationTicket.Identity;
// get claim and check database
return Task.FromResult<object>(null);
}
}
});
可以抛出异常来阻止身份验证流。像这样
throw new System.IdentityModel.Tokens.SecurityTokenValidationException();
在异常处理程序中,向用户添加一条友好消息。