Google授权错误错误400:redirect_uri_mismatch

Google Authorization Error Error 400: redirect_uri_mismatch

我的 asp.net 核心网络 api 有一个严重的问题,google 登录在本地主机上工作正常,但在 ElasticBeanstalk 中的远程服务器上发布时会抛出此错误。 所有身份验证过程在本地主机上都可以。如果有人可以帮助解决这个问题,请。

这是我使用的完全相同的代码。

`public class AuthController:ControllerBase { const string callbackScheme = "xamarinessentials";

    [HttpGet("{scheme}")]
    public async Task Get([FromRoute]string scheme)
    {
        var auth = await Request.HttpContext.AuthenticateAsync(scheme);

        if (!auth.Succeeded
            || auth?.Principal == null
            || !auth.Principal.Identities.Any(id => id.IsAuthenticated)
            || string.IsNullOrEmpty(auth.Properties.GetTokenValue("access_token")))
        {
            // Not authenticated, challenge
            await Request.HttpContext.ChallengeAsync(scheme);
        }
        else
        {
            var claims = auth.Principal.Identities.FirstOrDefault()?.Claims;
            var email = string.Empty;
            email = claims?.FirstOrDefault(c => c.Type == System.Security.Claims.ClaimTypes.Email)?.Value;

            // Get parameters to send back to the callback
            var qs = new Dictionary<string, string>
            {
                { "access_token", auth.Properties.GetTokenValue("access_token") },
                { "refresh_token", auth.Properties.GetTokenValue("refresh_token") ?? string.Empty },
                { "expires", (auth.Properties.ExpiresUtc?.ToUnixTimeSeconds() ?? -1).ToString() },
                { "email", email }
            };

            // Build the result url
            var url = callbackScheme + "://#" + string.Join(
                "&",
                qs.Where(kvp => !string.IsNullOrEmpty(kvp.Value) && kvp.Value != "-1")
                .Select(kvp => $"{WebUtility.UrlEncode(kvp.Key)}={WebUtility.UrlEncode(kvp.Value)}"));

            // Redirect to final url
            Request.HttpContext.Response.Redirect(url);
        }
    }`

这是 Google 中的 startup.cs 或 .net 6 中的 program.cs 身份验证配置。

这是我的 Google 开发者控制台

您需要接受 XForwardedProto

在 Startup.cs 或 Program.cs 中(在 .net 6 中)

public void ConfigureServices(IServiceCollection services)
{
  ...
    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders = ForwardedHeaders.XForwardedProto;
    });
   ...  
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
 ...
 app.UseForwardedHeaders();
 ...
}