問題タブ [identityserver3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
facebook - Thinktecture IdentityServer3 Facebook ログイン ボタンの問題
ユーザー管理、認証、およびリソースの承認のために、プロジェクトで「IdentityServer3 - IdentityManager - MembershipReboot」を使用しています。
以下のサンプルから始めて、ユーザーの作成、/connect/token api による認証、およびリソースの承認に成功しました。 https://github.com/thinktecture/Thinktecture.IdentityServer.v3.Samples/tree/master/source/MembershipReboot
私のソリューションの簡単なアーキテクチャは
データベースとしてMySql。MembershipReboot.EF を介した MembershipReboot への通信。
クライアント プロジェクトは、html + angularjs を使用して開発されます。
リソース API は Nancy を使用して開発され、別のプロジェクトで Owin+Katana でホストされます。
認証サービス (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 認証オプションを設定する際にどこが間違っているか教えてください。
c# - IdentityServer3 への登録後にローカル ユーザーを自動的にログインする
IdentityServer3を使用して、ユーザーが登録プロセスを完了した後、自動的にログインしてローカル ユーザーをクライアント アプリケーションにリダイレクトする必要があります。これを行うエレガントな方法はありますか?私の掘り下げから、そうではないと思われますが、これを達成するために使用できるハックはありますか?
カスタムUser Serviceを使用して外部ユーザーに対してこれを実現できましたが、これは部分的なログインを利用していました。ただし、ローカル ユーザーの場合、ユーザー名とパスワードでログインするまで、ユーザー サービスによって処理される認証プロセスには参加しません。
また、登録プロセスは複数の画面/ビューでカバーされているため、ユーザーのパスワードにアクセスできないことにも注意してください。この場合、登録プロセスの一部として電子メールを確認する必要があります。
進捗:
このhttps://github.com/IdentityServer/IdentityServer3/issues/563を見つけましたが、リダイレクトをトリガーする方法がわかりませんでした。
以下を使用して認証トークンを発行しようとしています。
しかし、これまでにできる最善の方法は、ユーザーをログイン画面にリダイレクトすることです。
javascript - Ajax 経由のリクエスト時に OpenIDConnect 認証を完了する
通常の OpenIDConnect サーバーは次のように動作します。
- あなたはに行きます
a.com/secure-resource
- あなた
302
はサーバーから戻ってきます - ブラウザがそれを処理し、ID サーバーに送信します
- そこにログインします
a.com
それはあなたを経由して送り返しますPOST
- ログインしてブラウザ
a.com
に戻ります。a.com/secure-resource
ただし、解決しようとしているシナリオがありますが、あなたの助けが必要です。
- ユーザーはすでに idServer にログインしています
- ユーザーはログインしています
a.com
- ユーザーはログインしていません
b.com
b.com
(別のドメインからa.com
)Webサーバーにajax呼び出しを送信する必要がありますb.com
OpenIDConnect を使用するように構成されています。- しかし、
b.com
Ajax 経由のリクエストであるため、idServer にユーザーを正常にリダイレクトすることはできません。(応答で返されるのは のみです302
)
先に進んで、Ajax 経由で 302 を処理できます (セキュリティの観点から、それが機能するかどうかはまだわかりません)。
しかし
これらの状況向けに設計された IdentityServer/OpenIDConnect のシナリオはありますか?
wcf - WCF と WIF で JWT トークンを使用する方法は?
一般的注意事項
私たちはIdentityServer3を使用しており、これまでのところ非常に満足しています。
MS と Thinktecture OWIN ミドルウェアの両方の助けを借りて、MVC と ASP.NET Web API アプリケーションを非常に簡単に保護することができました。
私たちが取り組んでいるクライアントにはまだ多くの SOAP WCF サービスがあり、ここで行き詰っています。
セットアップ
私はうそをつくつもりはありません.WCFの経験はまったくありません.非常に基本的なシナリオでしか使用していません.basicHttpBinding、トランスポートなし、メッセージセキュリティを理解しています.
これは私が達成したいことです:
- クライアントが IdentityServer から JWT アクセス トークンを取得する
- どういうわけか、トークンは SOAP メッセージ ヘッダーで終了します。
- WCF はトークンを読み取り、検証します
- WCF はクレームを検査し、いくつかの基準に基づいて承認を実行します
3番目のステップが機能しません。
サーバーのセットアップ
- セキュリティモード
ws2007FederationHttpBinding
付きを使用しています。TransportWithMessageCredential
メッセージには a が含まれてBearerKey
おり、トークンのタイプはurn:ietf:params:oauth:token-type:jwt
- このサービスは、 NuGet パッケージ
JwtSecurityTokenHandler
から追加した WIF ID パイプラインを使用します。System.IdentityModel.Tokens.Jwt
クライアントのセットアップ
- STS によって発行された JWT トークンは
BinarySecurityToken
XML 要素にラップされ、それ自体がGenericXmlSecurityElement
- このトークンは、のパラメータとして使用され
CreateChannelWithIssuedToken
ますChannelFactory
何が起こるのですか
トークンは SOAP ヘッダーで検出され、 に渡されJwtSecurityTokenHandler
ます。
しかし、例外がスローされます。
JustDecompiling の後、SOAP ヘッダーの XML 要素をさらに読み取るときにエラーが発生したようです。奇妙なのは、トークンが最後の要素であることです。メッセージ全体は次のようになります。
形に異常があるようには見えません。</o:Security>
スタック トレースから、トークンが適切に読み取られて処理されているため、最後の要素を読み取るときに例外をスローする必要があります。
再現
サンプル リポジトリをフォークしたので、気が向いたら見てみてください。関連するプロジェクトは次のとおりです。
SelfHost (Minimal)
sources
フォルダー内。これがSTSです- ソリューションでは
Clients
、WCF サービスはAPIs
フォルダーにあります。 Clients
ソリューションでは、WCF クライアントはプロジェクトConsole Client Credentials With Wcf
です。
それを起動する最善の方法は、最初に STS を開始し、次にRight click -> Debug -> Start new instance
WCF サービスで開始し、次に WCF クライアントで同じことを開始することです。
前もって感謝します!
identityserver3 - IdentityServer v3 でメンバーシップを再起動する
Thinktecture IdentityServer と組み合わせて、MembershipReboot から UserAccount プロパティを抽出するのに問題があります。ここにあるサンプル リポジトリを使用して稼働しています: https://github.com/identityserver/IdentityServer3.MembershipReboot
Implicit Grant Flow で「openid profile」スコープをリクエストすると、id_token からの「given_name、middle_name」などの多くのユーザー アカウント フィールドと、userinfo エンドポイントからの応答が欠落しています。これは、GetClaimsFromAccount 関数で割り当てる必要があるためだと理解しています。
RequestClaims が MembershipRebootUserService クラスの GetProfileDataAsync() 関数に入ることを確認できます。GetClaimsFromAccount の TAccount のインスタンスにカーソルを合わせると、CustomUser 動的プロキシに表示される Firstname、Lastname などのプロパティを確認できますが、私の人生は、それらにアクセスしてクレームコレクションにコピーする方法を考え出しますか?
より詳しい情報:
問題は次の行にあると思われます。
これは、ユーザー アカウントのプロパティをクレームに変換する必要があるように見えますが、何も返されません。
c# - Asp.Net MVC アプリケーションを使用した IdentityServer のセットアップ
セキュリティ全般、特にIdentityServerについての知識がほとんどないため、これを尋ねることを前もってお詫びします。
Asp.Net MVC アプリケーションのセキュリティを管理するように IdentityServer をセットアップしようとしています。
私は彼らのウェブサイトのチュートリアルに従っています: Asp.Net MVC with IdentityServer
ただし、ID「サーバー」部分用に別のプロジェクトがあるという点で、少し異なることを行っています。これにより、2 つの Startup.cs ファイルが作成されます。1 つはアプリケーション用で、もう 1 つは Identity Server 用です。
アプリケーションの場合、Startup.cs ファイルは次のようになります。
ID サーバーの場合、startup.cs ファイルは次のとおりです。
承認マネージャーもセットアップしています
たとえば、ResourceAuthorize 属性で装飾されたコントローラー メソッドを定義すると、次のようになります。
次に、このメソッドに初めてアクセスしようとすると、デフォルトのログイン ページにリダイレクトされます。
ただし、私が理解していないのは、アプリケーション用に定義したユーザーでログインすると (以下を参照)、
Bearer error="insufficient_scope" という 403 エラーが発生します。
誰かが私が間違っていることを説明できますか?
その後、アクション メソッドにアクセスしようとすると、同じエラーが返されます。私が定義したユーザーは、このメソッドにアクセスできるという正しい主張を持っているようです。ただし、クレーム チェックは、このメソッドに最初にアクセスしようとしたときに 1 回だけ行われます。ログインすると Cookie が取得され、その後メソッドにアクセスしようとするとクレーム チェックが行われません。
私は少し迷っています。これを解決するための助けをいただければ幸いです。
前もって感謝します。
編集:ここにスケールとクライアントクラスがあります
そして Client クラス
また、いつクレーム チェックを行うかを決定するために使用するカスタム フィルター属性も作成しました。
ブレークポイントは、URL への最初の要求でのみヒットします。後続の要求では、フィルター属性のブレークポイントにヒットしないため、チェックは行われません。URLが要求されるたびにチェックを行う必要があると思っていたので、これは私にとって驚くべきことです。