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