0

我使用「MembershipReboot IdentityServer3 - - IdentityManager」。Thinktecture IdentityServer3 Facebook的登錄按鈕問題

我從下面的示例開始,已經很好地創建用戶,通過/connect/token api驗證它們並授權資源。 https://github.com/thinktecture/Thinktecture.IdentityServer.v3.Samples/tree/master/source/MembershipReboot

爲我解決一個簡短的架構是

  1. MySQL作爲數據庫。通過MembershipReboot.EF與MembershipReboot通信。

  2. 客戶端項目是使用html + angularjs開發的。

  3. 資源API是使用Owin + Katana託管在獨立項目上的Nancy &開發的。

  4. 驗證服務(IdSvr + IdMgr + MR)託管在一個單獨的項目。

現在我想創建一個簡單的按鈕/鏈接點擊這導致我到Facebook登錄。此按鈕的功能應與IDSvr默認登錄頁面(https://localhost:44333/core/login?signin=4f909a877cc465afd26d72f60ec08f51)「Facebook按鈕」中定義的相同。

我試過Google搜索了很多,但沒有任何案例匹配我的場景。 我甚至試圖複製默認IdSvr Facebook登錄的請求 - 響應行爲,但這不起作用,因爲cookies不會保存在最終客戶端上。

此外,我試圖點擊「https://localhost:44333/core/signin-facebook」並獲得響應作爲HTTP/1.1 500內部服務器錯誤從服務器。所以我認爲可能是我在IdSrv項目中設置facebook選項時出現錯誤。

因此,如果有人可以只提供給我一個IdSvr API連接或告訴我如何配置ID SVR的使映射網址可以將其重定向到Facebook登錄。或者可以告訴我,在IdSrv中設置Facebook身份驗證選項時我錯了。

+1

有人可以解釋一下,爲什麼我的問題是downvoted? –

回答

3

對於我的問題,一個簡單而簡單的答案是我在尋找url。

https://localhost:44333/connect/authorize?client_id=implicitclient&response_type=token&scope=read&redirect_uri=http://localhost:8088/login/auth&nonce=random_nonce&acr_values=idp%3AFacebook&response_mode=form_post

閱讀資料,如果你想獲得這個網址

經過大量的命中& &試驗研究工作的更好的主意,我已經得到了這個解決方案。那麼我認爲這個問題的根本原因是突然的新技術(Owin,Katana,OAuth,IdentityServer,IdentityManagement,MembershipReboot,Owin Facebook)以及很少的時間來理解它們。

我會建議人們,無論誰是同樣的情況我再先了解一下OAuth的想法。我發現下面的鏈接是一個簡短而好的鏈接。

http://tutorials.jenkov.com/oauth2/index.html

在此之後我才知道,在我們的場景中,我們處理的是兩個應用程序,因此兩個認證。

  1. 用於連接用戶到Facebook。我們在developers.facebook.com上創建了一個應用程序

  2. 用於將用戶連接到IdentityServer。我們在AuthenticationServices項目的Clients.cs文件中創建了一個客戶端。

所以現在這裏是最終的解決方案。 localhost:44333其中AuthenticationService正在運行 locahost:8088其中FrontEnd服務正在運行哪個正在調用AuthenticationService。

1.創建AuthenticationServices客戶端應用程序,如下

  new Client 
      { 
       ClientName = "Implicit Clients", 
       Enabled = true, 
       ClientId = "implicitclient", 
       ClientSecrets = new List<ClientSecret>{ 
        new ClientSecret("secret".Sha256()) 
       }, 
       Flow = Flows.Implicit, 
       RequireConsent = true, 
       AllowRememberConsent = true, 

       RedirectUris = new List<string> 
       { 
        "http://localhost:8088/login/auth" //This should be redirect url you want to hit after your app(not facebook app) redirects. 
       }, 

       ScopeRestrictions = new List<string> 
       { 
        Constants.StandardScopes.OpenId, 
        Constants.StandardScopes.Profile, 
        Constants.StandardScopes.Email, 
        "read", 
        "write", 
       }, 

       //SubjectType = SubjectTypes.Global, 
       AccessTokenType = AccessTokenType.Jwt, 

       IdentityTokenLifetime = 360, 
       AccessTokenLifetime = 360, 
      }, 

2創建授權URL如下

 var client = new OAuth2Client(new Uri("https://localhost:44333/core/connect/authorize")); 
     var startUrl = client.CreateAuthorizeUrl(
      clientId: "implicitclient", 
      responseType: "token", 
      scope: "read", 
      redirectUri: "http://localhost:8088/login/auth", 
      nonce: "random_nonce", 
      responseMode: "form_post", 
      acrValues: "idp:Facebook"); 
  • Facebook的應用程序成功授權後將默認重定向到http://localhost:44333/signin-facebook。所以不需要在那裏做任何改變。

  • 最後在http://localhost:8088/login/auth您將在成功驗證後獲得access_token(+其他參數)。在此之後,您可以使用此令牌訪問資源服務器中的資源。