0

ユーザー管理、認証、およびリソースの承認のために、プロジェクトで「IdentityServer3 - IdentityManager - MembershipReboot」を使用しています。

以下のサンプルから始めて、ユーザーの作成、/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 は Nancy を使用して開発され、別のプロジェクトで Owin+Katana でホストされます。

  4. 認証サービス (IdSvr+IdMgr+MR) は、別のプロジェクトでホストされています。

ここで、Facebook のログインにつながる簡単なボタン/リンクをクリックして作成したいと考えています。このボタンの機能は、IDSvr の既定のログイン ページ ( https://localhost:44333/core/login?signin=4f909a877cc465afd26d72f60ec08f51 ) の「Facebook ボタン」で定義されているものと同じである必要があります。

私はグーグルでインターネットをたくさん試しましたが、私のシナリオに一致するケースはありません。デフォルトの IdSvr facebook ログインの要求と応答の動作を再現しようとしましたが、Cookie がエンド クライアントに保存されていないため、これは機能しません。

また、「https://localhost:44333/core/signin-facebook 」を押して、サーバーからHTTP/1.1 500 Internal Server Errorとして応答を取得しようとしました。IdSrv プロジェクトで Facebook のオプションを設定する際にどこか間違っているのではないかと思います。

したがって、誰かが接続するための IdSvr API を 1 つだけ提供してくれるか、Id Svr を構成して URL をマッピングして Facebook ログインにリダイレクトできるようにする方法を教えてくれればいいのです。または、IdSrv で Facebook 認証オプションを設定する際にどこが間違っているか教えてください。

4

1 に答える 1

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

この URL について詳しく知りたい場合は、さらにお読みください。

多くのヒット&トライアル&スタディの努力の後、私はこれに対する解決策を得ました. この問題の根本的な原因は、突然の新しい技術的なもの (Owin、Katana、OAuth、IdentityServer、IdentityManagement、MembershipReboot、Owin Facebook) と、それらすべてを理解するためのわずかな時間だったと思います。

私と同じ状況にある人は、まず OAuth について理解するようアドバイスします。以下のリンクが短くて良いものであることがわかりました。

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

この後、私たちのシナリオでは 2 つのアプリケーション、つまり 2 つの認証を扱っていることを知りました。

  1. ユーザーを Facebook に接続するため。developers.facebook.com でアプリを作成しました

  2. ユーザーを IdentityServer に接続するため。AuthenticationServices プロジェクトの Clients.cs ファイルにクライアントを作成しました。

だから今ここに最終的な解決策があります。localhost:44333 AuthenticationService が実行されている場所 locahost:8088 ここで、 AuthenticationService を呼び出している FrontEnd サービスが実行されています。

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 以下のように Authorize 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");
  1. 認証が成功すると、Facebook アプリはデフォルトをhttp://localhost:44333/signin-facebookにリダイレクトします。したがって、そこで変更を行う必要はありません。

  2. 最後にhttp://localhost:8088/login/authで、認証が成功した後に access_token (+ いくつかの他のパラメーター) を取得します。これ以降、このトークンを使用して Resources サーバーからリソースにアクセスできます。

于 2015-05-15T11:23:55.550 に答える