使用web.config授权元素时不会触发OWIN挑战

时间:2016-05-18 09:15:49

标签: c# asp.net asp.net-identity owin identityserver3

我正在将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",
                ...
            }
...

有没有办法利用网络配置中的现有授权元素,这样我就不必在代码中再次进行这些检查?

1 个答案:

答案 0 :(得分:4)

在app.UseOpenIdConnectAuthentication:

之后添加以下代码
VideoExport

这将指示Owin在集成管道中运行。