【问题标题】:change facebook redirect_uri web api更改 facebook redirect_uri web api
【发布时间】:2016-03-13 12:38:52
【问题描述】:

我想知道是否有人可以帮助我或为我指明正确的方向。我已经在我的 web api 2 项目中设置了 facebook 社交登录,它可以正常工作。但是,当我将其部署到生产环境时,我发现 redirect_uri 显示的是 HTTP 而不是 HTTPS,这会导致服务崩溃。

我首先想知道redirect_uri是如何构造的,有没有办法更新它。

发生这种情况的全部原因是我们的负载均衡器。该站点在 HTTP 协议下运行,但负载均衡器接受 HTTPS 流量并将其重定向到 HTTP。不幸的是,我无法更新负载均衡器,因此需要找到解决方法。

我确实尝试在IFacebookAuthenticationProviderApplyRedirect 方法中拦截redirect_uri,这成功地允许我将redirect_uri 从HTTP 更改为HTTPS。但是,当我这样做时,一旦我登录 Facebook 并且不知道为什么会发生这种情况,就会收到一个 access_denied 的固定错误。

有人可以帮我实现这个吗?我可以将facebook设置的redirect_uri和cookie显式标记为HTTPS吗?

这是我的 Facebook Provider 类

public class FacebookAuthProvider : IFacebookAuthenticationProvider
{
    public void ApplyRedirect(FacebookApplyRedirectContext context)
    {
        string redirect_uri = context.RedirectUri;
        redirect_uri = redirect_uri.Replace("redirect_uri=http", "redirect_uri=https");
        context.Response.Redirect(redirect_uri);
    }

    public Task Authenticated(FacebookAuthenticatedContext context)
    {
        context.Identity.AddClaim(new Claim("ExternalAccessToken", context.AccessToken));
        return Task.FromResult<object>(null);
    }

    public Task ReturnEndpoint(FacebookReturnEndpointContext context)
    {
        return Task.FromResult<object>(null);
    }
}

【问题讨论】:

    标签: c# facebook asp.net-web-api owin


    【解决方案1】:

    最好的方法是在应用开始时更新请求方案。像这样的:

    app.Use((context, next) =>
    {
      context.Request.Scheme = "https";
      return next();
    });
    

    【讨论】:

    • 嗨@Tractcher,非常感谢您的回复!效果很好!!!
    猜你喜欢
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2015-06-20
    • 2016-04-22
    • 2021-01-17
    • 2014-03-07
    • 2016-09-19
    相关资源
    最近更新 更多