Identityserver4 .net core 3.1 Google SSO回调url未命中

Identityserver4 .net core 3.1 Google SSO回调url未命中,identityserver4,google-login,.net-core-3.1,Identityserver4,Google Login,.net Core 3.1,我按照一个链接实现了谷歌SSO。但即使在成功登录之后,我仍然需要重定向身份验证属性中提到的uri。它无法访问回调url。有人能帮忙吗?我们的应用程序是一个.net core 3.1,带有IdentityServer 4。 我希望在谷歌登录后点击signinoauth2api,但这并没有发生 我可以看到一个来自浏览器的网络呼叫,格式如下,并且出现相关错误。 异常:关联失败。 显示原始异常详细信息 异常:处理远程登录时遇到错误。 Microsoft.AspNetCore.Authenticatio

我按照一个链接实现了谷歌SSO。但即使在成功登录之后,我仍然需要重定向身份验证属性中提到的uri。它无法访问回调url。有人能帮忙吗?我们的应用程序是一个
.net core 3.1
,带有
IdentityServer 4。
我希望在谷歌登录后点击
signinoauth2api
,但这并没有发生

我可以看到一个来自浏览器的网络呼叫,格式如下,并且出现相关错误。

异常:关联失败。 显示原始异常详细信息 异常:处理远程登录时遇到错误。 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandlerRequestAsync() Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext上下文) Startup.cs中的Soulbook.Api.Startup+c+d.MoveNext() 等待next.Invoke(); Swashback.AspNetCore.SwaggerUI.SwaggerUI中间件.Invoke(HttpContext HttpContext) Swashback.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext HttpContext,ISwaggerProvider swaggerProvider) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文) PFB我的代码供参考

[HttpGet]
[授权(AuthenticationSchemes=GoogleDefaults.AuthenticationScheme)]
[路线(“/Feed”)]
公共行动结果提要()
{
返回Ok();
}
[HttpGet]
[路线(“/签名”)]
公共行动结果签名()
{
var authProperties=新的AuthenticationProperties
{
重定向URI=“/”
};
返回新的ChallengeResult(GoogleDefaults.AuthenticationScheme、authProperties);
}
[HttpPost]
[路线(“/signinoauth2”)]
public ActionResult signinoauth2Async([FromForm]对象数据)
{
返回Ok();
}
Startup.cs
使用Microsoft.AspNetCore.Authentication.Cookies;
使用Microsoft.AspNetCore.Authentication.OpenIdConnect;
使用Microsoft.AspNetCore.Authentication.Google;
使用Microsoft.AspNetCore.Authorization;
使用Microsoft.AspNetCore.Mvc.Authorization;
services.AddAuthentication(选项=>
{
options.DefaultScheme=CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme=GoogleDefaults.AuthenticationScheme;
})
.AddCookie(o=>{
o、 LoginPath=“/signin”;
o、 LogoutPath=“/signout”;
o、 ExpireTimeSpan=从天开始的时间跨度(7);
})
.AddGoogle(o=>{
o、 ClientId=“***”;
o、 ClientSecret=“**”;
o、 SaveTokens=true;
o、 CallbackPath=“/signinoauth2”;
});
services.AddMvc(配置=>
{
var policy=new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()文件
.AddAuthenticationScheme(谷歌默认值.AuthenticationScheme)
.Build();
config.Filters.Add(新的授权过滤器(策略));
}).AddNewtonsoftJson();
编辑:使用以下任何一种格式的signinoauth2也没有帮助。
[HttpGet]
[路线(“/signinoauth2”)]
public ActionResult signinoauth2Async(字符串状态、字符串代码、字符串范围、字符串提示)
{
返回Ok();
}
[HttpPost]
[路线(“/signinoauth2”)]
public ActionResult signinoauth2Async(字符串状态、字符串代码、字符串范围、字符串提示)
{
返回Ok();
}

听起来你实际上没有得到正确的身份验证,如果你是,应用程序将重定向到登录页,我认为该页的控制器具有[Authorize]属性。您是否可能忘记将自己添加为identity server引用的数据库中的用户?

我假设您希望在您的enpoint中获取Google用户信息? 然后,您要做的是配置外部身份验证属性。由于这一点,您将能够在重定向端点上获取用户

    [HttpGet("login/google/")]
    [AllowAnonymous]
    public async Task<IActionResult> LoginGoogle()
    {
        var properties = _signInManager.ConfigureExternalAuthenticationProperties(GoogleDefaults.AuthenticationScheme, "/api/identity/google-redirect");
        return Challenge(properties, GoogleDefaults.AuthenticationScheme);
    }
[HttpGet(“login/google/”)]
[异名]
公共异步任务登录日志()
{
var properties=_signInManager.ConfigureExternalAuthenticationProperties(GoogleDefaults.AuthenticationScheme,“/api/identity/google redirect”);
返回质询(属性、GoogleDefaults.AuthenticationScheme);
}
您在启动时配置的是一个回调路由,它由中间件处理,永远不会到达控制器中的端点。您想要实现的是让用户通过这样的重定向路由

    [HttpGet("google-redirect")]
    [AllowAnonymous]
    public async Task<IActionResult> CallbackGoogle()
    {
        var info = await _signInManager.GetExternalLoginInfoAsync();
        return Ok();
    }
[HttpGet(“谷歌重定向”)]
[异名]
公共异步任务回调Google()
{
var info=await _signInManager.getexternallogininfosync();
返回Ok();
}

我们什么时候可以将这个谷歌用户添加到我们的身份服务器?我希望能点击回拨url,但它不会被点击。这是我真正的问题。我也在我的问题中添加了我的代码,以提高清晰度。请尝试在页面上按ctrl+f5,也可以只按f5来清除Cookie,或者在“匿名”窗口中尝试,看看是否有不同的行为。(尝试多次,看看这是否是cookie缓存问题)您的登录页面是否对包含控制器的/signinoauth2路由中的oauth2 post路由进行了某种ajax调用?
    [HttpGet("google-redirect")]
    [AllowAnonymous]
    public async Task<IActionResult> CallbackGoogle()
    {
        var info = await _signInManager.GetExternalLoginInfoAsync();
        return Ok();
    }