2017-08-11 9 views
0

IPersistedGrantStoreを実装し、プロパティRequireConsentとAllowRememberConsentをtrueに設定したクライアントを定義しました。 OAuth仕様に従って、オフラインアクセススコープが要求されている場合は常にConsentが強制的に強制されるように、私はそのクライアントからオフラインアクセススコープも削除しました。 初めてログイン画面に行くと、同意表示が表示され、許可をクリックして自分の決定を覚えています。DBテーブルPersistedGrantsのレコードがuser_consentタイプで追加されています。次にログインしようとすると、そのレコードは私のIPersistedGrantStoreの実装によってデータベースから取得されますが、同意のビューは引き続き表示されます。もう一度[許可]をクリックすると、IS4が同じキーを持つ別のPersistedGrantレコードを挿入しようとしているため、DBが例外をスローします。Identity Sever 4永続的なグラントが使用されていません

期待どおりに動作するような設定を見落としましたか? PS。私はすべての主要な店舗を実装しており、すべてがそれらのInMemoryストアを使用せずにSQL Serverデータベースに保存されています。

答えて

0

は、デバッグ、かなりの量の後、ここでの問題が何であったかです: _ScopeListItem.cshtml 6_AspNetIdentityサンプルから、これは明らかに必要とされる範囲がマークされている場合にのみレンダリングされたコード

@if (Model.Required) 
{ 
    input type="hidden" name="ScopesConsented" value="@Model.Name" /> 
} 

のこのセクションを持っています。必須としてマークされているスコープは、コントローラアクションに投稿されたスコープのみです。 私の場合、OpenIdとProfileを標準スコープとして要求するクライアントと、ApiResourceによって定義された3つのスコープがありました。確かに、私は必要に応じてApiスコープに印をつけませんでしたが、Profileスコープがデフォルトでは必要ないという問題もありました。 したがって、同意を保存するときに、DataプロパティにProfileスコープが含まれていなかったため、その後のすべてのログイン試行で要求と同意のスコープの不一致が発生し、同意プロセスがトリガーされました。

関連する問題