我在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
答案 0 :(得分:0)
我最近遇到了同样的问题,原因是在退出时没有删除cookie。在我的情况下,我发现我在StartUp.cs中的 CookieAuthenticationOptions 中设置的 CookieName 属性导致了问题。
在浏览器中调查此问题时,我注意到没有使用此名称创建cookie,而是使用“idsvr.external”。删除cookie名称设置解决了我的问题。
app.UseCookieAuthentication(new CookieAuthenticationOptions)
{
...
CookieName = "...",
...
}
答案 1 :(得分:0)
由于我无法引发“ OnAuthenticationFailed”或“ OnRemoteFailure”之类的事件,因此我创建了操作并自动将其重定向到视图。它有效,尽管我知道这不是最好的方法。