Asp.net Web api 2 Facebook登录

Asp.net Web api 2 Facebook登录,asp.net,asp.net-web-api,Asp.net,Asp.net Web Api,我正在尝试通过Facebook验证我的web api的用户身份。当我将returnurl参数指定给网站的基础时,我能够对用户进行身份验证 在我的测试环境中,我的站点布局如下所示: -这是api位置 -这是客户网站的位置 我通过api获得提供者列表,它返回以下JSON [{"Name":"Facebook","Url":"/api/api/Account/ExternalLogin? provider=Facebook&response_type=token& client_id=

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

在我的测试环境中,我的站点布局如下所示:

-这是api位置

-这是客户网站的位置

我通过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并要求用户允许我的应用

因此,当我使用基本url时,一切都正常,但当我将returnurl更改为以下内容时:

/web/&generateState=true

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

错误:无效的\u请求


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

您需要编辑ValidateClientRedirectUri方法以包含自定义返回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);
    }
下面的例子是一个快速破解,直到您确定确切的返回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);
    }
公共覆盖任务ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext)
{
if(context.ClientId==\u publicClientId)
{
Uri expectedRootUri=新Uri(context.Request.Uri,“/”;
if(expectedRootUri.AbsoluteUri==context.RedirectUri)
{
context.Validated();
}
}
返回Task.FromResult(空);
}

公共覆盖任务ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext)
{
if(context.ClientId==\u publicClientId)
{
context.Validated();
}
返回Task.FromResult(空);
}