[英]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.