我有一个使用表单身份验证的旧版asp.net应用。我正在进行更改,以便在某些情况下,它会将用户反弹到我们的ADFS服务器以获取令牌。这一切都运行正常,ADFS通过有效令牌将我发回给应用程序。
现在,这个应用程序已经足够大,以至于它没有使用内置的身份信息,更不用说声明性,所以当我获得有效的令牌并返回我的依赖方时,IsAuthenticated是真的,而我有一个有效的ClaimsIdentity,但当然,我当前的代码从来都不会看那些东西。重新设计整个应用程序以使用Thread.CurrentPrincipal的ROI非常差,因此当我们从ADFS返回并设置legacy / proprietary / old用户时,我必须为这些用户获取Thread.CurrentPrincipal。 /此应用程序运行的身份类。我的问题究竟是在何时/何时这样做?
我的第一个想法是在global.asax页面中的一个事件处理程序中执行它,可能在Application_BeginRequest()或Application_AuthenticateRequest()中,但这只是一个猜测。在那里,我想我可以检查Thread.CurrentPrincipal是否经过身份验证,以及我的会话用户是否已配置。如果没有,我可以继续进行设置。我不是肯定的,如果这是正确的方法,或者如果是,那么这两种方法中的哪一种是最好的选择,因为我不确定每个方法的确切时间。
答案 0 :(得分:1)
两者都可能合适。 Application_BeginRequest
会针对每个请求触发,其中Application_AuthenticateRequest
只能针对需要身份验证的请求触发,并符合您的Web.config设置。
如果您提供的服务非常多,并且不需要身份验证,那么在Application_AuthenticateRequest
中执行此操作可能会更有效。这里并不是一个常态,因为你在系统之外工作,并且假设无论你做什么都是临时措施。