簡體   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