繁体   English   中英

Asp.net Web api 2 Facebook登录

[英]Asp.net Web api 2 Facebook login

我正在尝试通过Facebook为我的网络API验证用户。 当我将returnurl参数指定到网站的基础时,我能够对用户进行身份验证。

我的网站布局在我的测试环境中如下:

http://subdomain.main.com/api/ - 这是api的位置

http://subdomain.main.com/web/ - 这是客户网站的位置

我通过api获取提供者列表,它返回以下JSON

[{"Name":"Facebook","Url":"/api/api/Account/ExternalLogin?
provider=Facebook&response_type=token&
client_id=self&redirect_uri=https%3A%2F%2Fsubdomain.main.com%2F&state=mScYbSFDVHMMxVH8kaNWmDUNhqo2s4RFbG9SaBXt_jM1","State":"mScYbSFDVHMMxVH8kaNWmDUNhqo2s4RFbG9SaBXt_jM1"}]

然后,我将用户重定向到API提供的URL。 这将打开Facebook并要求用户允许我的应用程序。

所以当我使用基本网址时它全部正常工作,但当我将returnurl更改为以下内容时:

https://subdomain.main.com/api/api/Account/ExternalLogins?returnUrl=https://subdomain.main.com / web / & generateState = true

api正常返回一个url,但是当我尝试将用户重定向到url时它只返回:

错误:invalid_request

如何让API重定向到我的网站,以便我可以捕获oauth令牌?

您需要编辑ValidateClientRedirectUri方法以包含您的自定义返回uri。 默认模板代码仅允许您网站的根目录作为有效的返回uri。

下面的例子是一个快速的黑客,直到你决定确切的返回uri。

public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
    {
        if (context.ClientId == _publicClientId)
        {
            Uri expectedRootUri = new Uri(context.Request.Uri, "/");

            if (expectedRootUri.AbsoluteUri == context.RedirectUri)
            {
                context.Validated();
            }
        }

        return Task.FromResult<object>(null);
    }

public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
    {
        if (context.ClientId == _publicClientId)
        {
            context.Validated();
        }

        return Task.FromResult<object>(null);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM