身份服务器4 OpenId Connect重定向到/ Account / AccessDenied

时间:2017-12-07 11:20:04

标签: c# asp.net-mvc azure openid-connect identityserver4

我在Github上提出了一个错误,但想知道是否有人可以提供帮助。 Bug #1839

问题/重现问题的步骤

我正在尝试使用openId Connect对我们的azure广告进行身份验证,但在回调方法之后,我被重定向到/ Account / AccessDenied

验证完成后,azure会重定向回到回调方法。

    /// <summary>
    /// Post processing of external authentication. Callback from azure.
    /// </summary>
    [HttpGet]
    public async Task<IActionResult> TprUserLoginCallback(string returnUrl)
    {
        // read external identity from the temporary cookie
        var claimsPrincipal = await HttpContext.Authentication.AuthenticateAsync(IdentityServerConstants.ExternalCookieAuthenticationScheme);

        if (claimsPrincipal == null)
        {
            throw new Exception("External authentication error");
        }

        var claimResult = externalClaimsMapper.Map(claimsPrincipal);
        var claims = claimResult.Claims.ToArray();

        await HttpContext.Authentication.SignInAsync(claimResult.UserId, claimResult.UserName, claimResult.Provider, claims);

        return Redirect(interactionService.IsValidReturnUrl(returnUrl) ? returnUrl : "~/");
    }

然后,Redirect似乎进入了asp核心中间件(v1.1.3),它在日志中添加了一个条目,说明cookie已被禁止。

  

2017-12-06 11:01:13,920 [40] INFO   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - AuthenticationScheme:禁止idsrv.external,之后页面重定向到/ Account / AccessDenied。

     

2017-12-06 11:01:13,921 [40] INFO   Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectMiddleware.Log    - AuthenticationScheme:禁止OpenIdConnect。

启动 - cookie auth和openid connect auth

app.UseIdentityServer();

        var appSettings = container.GetInstance<AppSettings>();

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
            AutomaticAuthenticate = false,
            AutomaticChallenge = false,
            ExpireTimeSpan = TimeSpan.FromMinutes(appSettings.DefaultTokenLifetimeInMinutes)
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {
            ClientId = appSettings.AzureClientId,
            Authority = appSettings.AzureAuthority,
            PostLogoutRedirectUri = appSettings.AzurePostLogoutRedirectUri,
            DisplayName = "TPR Login",
            SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme,
            ResponseType = OpenIdConnectResponseType.IdToken,
            SaveTokens = true,
            RequireHttpsMetadata = false // F5's HTTPS handling so traffic will be HTTP
        });

        app.UseStaticFiles();
        app.UseCors("default");

        app.UseMvc(ConfigureRoutes.Configure);

重定向后,用户已登录,如果您手动导航到网址,则可以访问应用

日志文件的相关部分

  

2017-12-06 11:01:13,899 [40] INFO   Microsoft.AspNetCore.Hosting.Internal.WebHost.Log - 请求启动   HTTP / 1.1 GET http://localhost:44362/ 2017-12-06 11:01:13,900 [40]   DEBUG   Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Log    - 执行取消保护操作以锁定{144dcece-5570-4965-a74c-0ec3aed546e8}   (&#39; C:\ code \ tfs03 \ Single Sign   在\登录\ ReleaseSSO-DEV \ WebUI中\ Login.IdentityServer&#39 ;,   &#39; Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware&#39 ;,   &#39; idsrv&#39;,&#39; v2&#39;)。 2017-12-06 11:01:13,902 [40] INFO   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - HttpContext.User通过authenticationScheme:idsrv中的AutomaticAuthentication合并。 2017-12-06 11:01:13,904 [40]信息   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - AuthenticationScheme:idsrv已成功通过身份验证。 2017-12-06 11:01:13,905 [40]调试   IdentityServer4.Hosting.EndpointRouter.Log - 未找到端点条目   for request path:/ 2017-12-06 11:01:13,906 [40] DEBUG   Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Log -   请求路径/与支持的文件类型不匹配2017-12-06   11:01:13,909 [40]调试Microsoft.AspNetCore.Routing.RouteBase.Log -   请求已成功匹配路线名称&#39;默认&#39;和   模板&#39; {controller =登录} / {action =登录}&#39;。 2017-12-06 11:01:13,910   [40] DEBUG Microsoft.AspNetCore.Mvc.Internal.ActionSelector.Log -   Action&#39; Login.IdentityServer.Controllers.LoginController.Login   (Login.IdentityServer)&#39; id为&#39; cba23692-b89e-4fe7-bf59-ccc14c18352a&#39;   与约束不符   &#39; Microsoft.AspNetCore.Mvc.Internal.HttpMethodActionConstraint&#39;   2017-12-06 11:01:13,911 [40]调试   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Log -   执行行动   Login.IdentityServer.Controllers.LoginController.Login   (Login.IdentityServer)2017-12-06 11:01:13,913 [40]信息   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Log -   执行动作方法   Login.IdentityServer.Controllers.LoginController.Login   (Login.IdentityServer)带参数() - ModelState是有效的   2017-12-06 11:01:13,914 [40]调试   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Log -   执行的动作方法   Login.IdentityServer.Controllers.LoginController.Login   (Login.IdentityServer),返回结果   Microsoft.AspNetCore.Mvc.ChallengeResult。 2017-12-06 11:01:13,915 [40]   信息Microsoft.AspNetCore.Mvc.ChallengeResult.Log - 执行   ChallengeResult与身份验证方案(OpenIdConnect)。   2017-12-06 11:01:13,917 [40]调试   Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Log    - 执行取消保护操作以锁定{144dcece-5570-4965-a74c-0ec3aed546e8}   (&#39; C:\ code \ tfs03 \ Single Sign   在\登录\ ReleaseSSO-DEV \ WebUI中\ Login.IdentityServer&#39 ;,   &#39; Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware&#39 ;,   &#39; idsrv.external&#39;,&#39; v2&#39;)。 2017-12-06 11:01:13,918 [40]信息   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - AuthenticationScheme:idsrv.external已成功通过身份验证。 2017-12-06 11:01:13,920 [40]信息   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - AuthenticationScheme:禁止idsrv.external。 2017-12-06 11:01:13,921 [40]信息   Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectMiddleware.Log    - AuthenticationScheme:禁止OpenIdConnect。 2017-12-06 11:01:13,922 [40]信息   Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Log -   执行动作Login.IdentityServer.Controllers.LoginController.Login   (Login.IdentityServer)于10.0229ms 2017-12-06 11:01:13,924 [40] DEBUG   Microsoft.AspNetCore.Server.Kestrel.Log - 连接ID   &#34; 0HL9SILL2SM7P&#34;完成保持活跃的反应。 2017-12-06 11:01:13,926   [40] INFO Microsoft.AspNetCore.Hosting.Internal.WebHost.Log - 请求   完成于26.936ms 302 2017-12-06 11:01:13,930 [24] INFO   Microsoft.AspNetCore.Hosting.Internal.WebHost.Log - 请求启动   HTTP / 1.1 GET   http://localhost:44362/Account/AccessDenied?ReturnUrl=%2Flogin%2Ftpruserlogincallback   2017-12-06 11:01:13,932 [24]调试   Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.Log    - 执行取消保护操作以锁定{144dcece-5570-4965-a74c-0ec3aed546e8}   (&#39; C:\ code \ tfs03 \ Single Sign   在\登录\ ReleaseSSO-DEV \ WebUI中\ Login.IdentityServer&#39 ;,   &#39; Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware&#39 ;,   &#39; idsrv&#39;,&#39; v2&#39;)。 2017-12-06 11:01:13,934 [24]信息   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - HttpContext.User通过authenticationScheme:idsrv中的AutomaticAuthentication合并。 2017-12-06 11:01:13,935 [24] INFO   Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationMiddleware.Log    - AuthenticationScheme:idsrv已成功通过身份验证。 2017-12-06 11:01:13,936 [24]调试   IdentityServer4.Hosting.EndpointRouter.Log - 未找到端点条目   请求路径:/ Account / AccessDenied 2017-12-06 11:01:13,938 [24]   DEBUG Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Log - The   请求路径/帐户/ AccessDenied与支持的文件不匹配   型号2017-12-06 11:01:13,940 [24] DEBUG   Microsoft.AspNetCore.Routing.RouteBase.Log - 请求成功   匹配路线名称&#39;默认&#39;和模板   &#39; {控制器=登录} / {行动=登录}&#39 ;. 2017-12-06 11:01:13,941 [24]   DEBUG Microsoft.AspNetCore.Mvc.Internal.MvcRouteHandler.Log - No   行动符合当前要求2017-12-06 11:01:13,943 [24] DEBUG   Microsoft.AspNetCore.Builder.RouterMiddleware.Log - 请求没有   匹配任何路线。 2017-12-06 11:01:13,945 [24]调试   Microsoft.AspNetCore.Server.Kestrel.Log - 连接ID   &#34; 0HL9SILL2SM7P&#34;完成保持活跃的反应。 2017-12-06 11:01:13,946   [24] INFO Microsoft.AspNetCore.Hosting.Internal.WebHost.Log - 请求   完成时间为15.7755ms 404

2 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,原因是在退出时没有删除cookie。在我的情况下,我发现我在StartUp.cs中的 CookieAuthenticationOptions 中设置的 CookieName 属性导致了问题。

在浏览器中调查此问题时,我注意到没有使用此名称创建cookie,而是使用“idsvr.external”。删除cookie名称设置解决了我的问题。

app.UseCookieAuthentication(new CookieAuthenticationOptions)
{
    ...
    CookieName = "...",
    ...
}

答案 1 :(得分:0)

由于我无法引发“ OnAuthenticationFailed”或“ OnRemoteFailure”之类的事件,因此我创建了操作并自动将其重定向到视图。它有效,尽管我知道这不是最好的方法。