我正在将Web窗体应用程序从窗体身份验证迁移到OpenID Connect(使用OWIN和IdentityServer3)。 该应用程序已经在web.config中有很多“授权”元素(针对不同的位置),我想在迁移到OWIN后重用它。
<authorization>
<deny users="?" />
</authorization>
<location path="Path/Page.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
...
问题是,在我切换到OWIN而不是重定向到登录页面后,我得到了401(未经授权)。
目前,将用户重定向到登录页面的唯一方法是在Page_Load事件中手动进行挑战:
if (!Request.IsAuthenticated)
{
HttpContext.Current.GetOwinContext().Authentication.Challenge();
}
这就是我的Startup.Auth的样子:
public void ConfigureAuth(IAppBuilder app)
{
//reset the mapping dictionary to ensure the claims are not mapped to .NET standard claims
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
AuthenticationMode = AuthenticationMode.Active
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = "id",
Authority = IdentityConstants.BaseAddress,
RedirectUri = "uri",
ResponseType = "code id_token token",
SignInAsAuthenticationType = "ApplicationCookie",
Scope = "openid profile email roles offline_access",
...
}
...
有没有办法利用网络配置中的现有授权元素,这样我就不必在代码中再次进行这些检查?
答案 0 :(得分:4)
在app.UseOpenIdConnectAuthentication:
之后添加以下代码VideoExport
这将指示Owin在集成管道中运行。