2017-05-17 11 views
4

Identity Server 4で別のユーザーのアクセスを取り消すための推奨方法はありますか?私が見ているユースケースは、現在ログインしているユーザーのシステムアクセスを取り消す管理者です。別のユーザーのアクセストークンを取り消し、Identity Server 4でセッションを終了する方法はありますか?

私はRevocation Endpointのドキュメントを読んでおり、ユーザーが自分のアクセスを取り消すためにどのように使用できるのかを確認できます。しかし、管理者が特定のユーザーのアクセストークンが何であるかわからない場合、これをどのように行うことができますか?

同じことはEnd Session Endpointとなります。管理者はIDトークンをどのように知っていますか?

私がこれまでに試したのは、IProfileServiceを実装し、IsActiveAsyncメソッドで有効なユーザーアカウントを確認しています。お客様のdbでは、アカウントを無効にすることができます。これにより、ログインページにリダイレクトすることができます。しかしトークンとセッションはまだ生きています。これは、セッションを終了してアクセストークンを取り消すのに適した場所ですか?

または、ユーザートークンをデータベースに永続化していますか? I以下@Mashtonからの回答をもとに

更新

は、Identity Serverのドキュメントhereに永続性を実装する方法の例を発見しました。

説明したデータ移行を作成すると、列のトークンは[dbo].[PersistedGrants]になります。彼らは私の参照アクセストークンのようには見えなかったので、最初は混乱しましたが、ちょっと掘り下げた後、SHA-256ハッシュとして保存されていました。 Identity Server's GitHubハッシュキーでDefaultGrantStore実装を見てみると、以下のように... valueはトークンがある

const string KeySeparator = ":"; 
    protected string GetHashedKey(string value) 
    { 
     return (value + KeySeparator + _grantType).Sha256(); 
    } 

を...計算し、_grantTypeは...次のいずれかです

public static class PersistedGrantTypes 
    { 
     public const string AuthorizationCode = "authorization_code"; 
     public const string ReferenceToken = "reference_token"; 
     public const string RefreshToken = "refresh_token"; 
     public const string UserConsent = "user_consent"; 
    } 

永続性付与を使用しても元のアクセストークンは得られませんが、[dbo].[PersistedGrants]テーブルにはSubjectIdがあるため、アクセストークンを取り消すことができます。

アップデート2 - Identity Serverのは、私が暗黙のMVCクライアントを作成し、ログインが成功した後、私は、画面上の請求をdumpimgてるトークン

を作成し続けています。永続化されたgrant dbからアクセストークンを削除し、Postmanを使用してEnd Session Endpointでセッションを終了します(クレーム内のidトークンを使用)。ブラウザをリフレッシュすると、ユーザはログイン画面にリダイレクトされますが、の代わりに新しいアクセストークンと新しいIDトークンが取得されます。 Client.IdentityTokenLifetimeはわずか30秒です。

私はここで何が欠けているのアイデア?

答えて

5

Reference tokensではなくJWTsを無効にすることができます。はい、それらはdbに保存する必要があります。 IPersistedGrantStore(私の頭の上にあるので、名前が間違っている可能性があります)を見てください。構造がかなりシンプルであることがわかります。

保存したら、管理者が好きなことを行うことができます。たとえば、期限切れや完全削除などです。

+0

ありがとう@Mashton。 dbへの持続は、問題の半分、すなわちアクセストークンの削除を解決した。技術的に新しいアクセストークンが自動的に作成される可能性がありますが、私はどこにでも保持されているidトークンを見ることはできません。彼らのセッションを削除する方法を知っていますか? –

+0

@GavinSutherland私は、参照トークンが保護されたリソースに送信された一意の識別子であると考え、リソースは参照トークンをSTS(idsrv)に送り、参照トークンが取り消されていないことを検証した後、したがって、実際のトークンはユーザーには見えません。私はこれらの問題について専門家ではない。 https://leastprivilege.com/2015/11/25/reference-tokens-and-introspection/ – Mardoxx

+0

こんにちは@Mardoxxを参照してください。依拠当事者(例えば、mvcサイト)は、ユーザクレームを得るために参照トークンをアイデンティティサーバのイントロスペクションエンドポイントに送信しなければならない。自己完結型のトークンはこれを行う必要はありません。この投稿は、ユーザーのアクセス権を取り消すことについてであり、クレームを取得することについてのものではありません。 –

関連する問題