改变facebook redirect_uri web api

时间:2015-12-08 14:31:19

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

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

我想知道的是首先如何构建redirect_uri以及是否有任何更新方法。

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

我确实试图拦截ApplyRedirect IFacebookAuthenticationProvider方法中的redirect_uri,这成功地允许我将redirect_uri从HTTP更改为HTTPS。但是,当我这样做时,一旦我登录Facebook并且不知道为什么会这样,我会得到access_denied的错误。

有人可以帮我实现吗?我可以明确地将facebook设置的redirect_uri和cookie标记为HTTPS吗?

这是我的Facebook提供商类

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);
    }
}

1 个答案:

答案 0 :(得分:8)

执行此操作的最佳方法是在应用开始时更新请求方案。像这样:

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