使用kestrel在反向代理服务器中的Google API中使用HTTPS请求URI

时间:2017-05-19 07:34:38

标签: apache api reverse-proxy kestrel-http-server

背景: 使用Kestrel和Apache Core作为反向代理。对本网站中的所有流量使用https协议。

我的问题是,如何使用Google API强制回复使用https而非回调uri中的http?

我拨打Google API后收到错误消息。错误消息是“Error:redirect_uri_mismatch”。我已经使用https作为协议在Google API控制台上正确设置了回调。

请求详细信息如下:

> response_type=code
client_id=myclientidnum.apps.googleusercontent.com
redirect_uri=http://mysub.domain.com/signin-google
scope=openid profile email
state=long_long_code

如果您有任何想法,请给我写信。

3 个答案:

答案 0 :(得分:0)

当我尝试通过使用Kestrel的反向代理在Apache上运行的ASP.NET核心Web应用程序配置Google身份验证时,我也收到了redirect_uri_mismatch错误。

错误是由于将授权重定向URI设置为https。我将其更改为http后,Google身份验证就有效。

因此,假设您的域名为example.com,请从

更改您的授权重定向URI
https://example.com/signin-google

http://example.com/signin-google

答案 1 :(得分:0)

问题在于服务器未使用反向代理转发的标头,因此它正在请求不正确的协议。您需要:

  1. 确保您的反向代理正在设置X-Forward标头
  2. 在身份验证之前启用UseForwardedHeaders中间件
SELECT
    tj.Id, QuestionData.questionId, QuestionData.questionValue
FROM
    MyTableWithJson tj
    CROSS APPLY OPENJSON(tj.JsonContent)
    WITH ([questionId] INT '$.QuestionId', [questionValue] NVARCHAR(300) '$.Value') AS QuestionData
WHERE
    QuestionData.type = 'multichoice' // supposing you have a type on this entity

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-2.1&tabs=aspnetcore2x

答案 2 :(得分:0)

我遇到了同样的问题,并通过以下代码解决了这个问题。

           app.Use(async (ctx, next) =>
            {
                ctx.Request.Scheme = "https";
                await next();
            });

            ForwardedHeadersOptions forwardOptions = new 
             ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | 
                ForwardedHeaders.XForwardedProto,
                RequireHeaderSymmetry = false
            };

            forwardOptions.KnownNetworks.Clear();
            forwardOptions.KnownProxies.Clear();

            app.UseForwardedHeaders(forwardOptions);

既然 google 和 facebook 不支持生产应用程序中的 http 重定向,并且反向代理背后的 kestrel 在 http 上运行也面临着同样的问题。我使用上面的代码将所有请求的架构强制到 https(这是我在 https 反向代理背后的安全打赌),一切正常