在外部ADFS登录加载任何页面之前获取用户声明
本文关键字:获取 用户 声明 任何页 外部 ADFS 登录 加载 | 更新日期: 2023-09-27 18:01:23
我要做的是访问从ADFS登录返回的用户声明。ADFS返回用户名,并与该用户名,我必须运行查询到另一个数据库获取用户信息并存储它。我真的不知道在哪里做,最好的做法是什么。我可以在视图控制器中访问用户声明,比如:
public ActionResult Index()
{
var ctx = Request.GetOwinContext();
ClaimsPrincipal user = ctx.Authentication.User;
IEnumerable<Claim> claims = user.Claims;
return View();
}
但是我需要做的是,正如我所说的访问声明,就像在global.asax.cs或startup.cs中一样,在应用程序运行之前存储用户信息。
我的Startup.Auth.cs文件:
public partial class Startup
{
private static string realm = ConfigurationManager.AppSettings["ida:Wtrealm"];
private static string adfsMetadata = ConfigurationManager.AppSettings["ida:ADFSMetadata"];
public void ConfigureAuth(IAppBuilder app)
{
app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(
new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
});
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = realm,
MetadataAddress = adfsMetadata
});
}
}
我们在启动文件中为WsFederationAuthenticationOptions
值添加一个事件处理程序。
这将在安全令牌验证后立即发生。
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions()
{
MetadataAddress = MetadataAddress,
Wtrealm = Wtrealm,
Wreply = CallbackPath,
Notifications = new WsFederationAuthenticationNotifications()
{
SecurityTokenValidated = (ctx) =>
{
ClaimsIdentity identity = ctx.AuthenticationTicket.Identity;
DoSomethingWithLoggedInUser(identity);
}
}
};