2人の違いは何か説明できますか?私はクライアントの秘密を理解していますが、スコープの秘密はまだ明らかではありません...スコープの秘密が存在する必要があるのはなぜですか?IdentityServer3では、クライアント・シークレットとスコープ・シークレットの違いは何ですか?
ある意味でdocumentationが役に立ちましたが、私はこの2つの違いを説明するのに役立つとは思えませんでした。
2人の違いは何か説明できますか?私はクライアントの秘密を理解していますが、スコープの秘密はまだ明らかではありません...スコープの秘密が存在する必要があるのはなぜですか?IdentityServer3では、クライアント・シークレットとスコープ・シークレットの違いは何ですか?
ある意味でdocumentationが役に立ちましたが、私はこの2つの違いを説明するのに役立つとは思えませんでした。
クライアントの秘密は、token endpointへのアクセスを承認するために使用されます。このエンドポイントは、クライアントIDとクライアントシークレットを使用し、アクセストークンを要求できます。
スコープの秘密は、introspection endpointへのアクセスを承認するために使用されます。このエンドポイントは、スコープIDとスコープシークレットを使用します。アクセストークンに含まれるスコープのみがスコープIDをイントロスペクトすることが許可されているためです。
Scott Bradyのおかげで、私は私の質問に答えることができました。スコット・ブレイディは、クライアントアプリケーションがtoken end pointを呼び出したときに、クライアントの秘密が使用されている、言ったようにここで...私が見つけたもの
クライアントの秘密
です。このようにして、許可されたクライアントアプリケーションだけがエンドポイントにアクセスできます。トークンエンドポイントを呼び出すには、クライアントアプリケーションに有効なクライアントIDとクライアントシークレットが必要です。
スコープ秘密
しかし、どのようなあなたのリソースサーバはIdentityServerを呼び出す必要がある場合は?これは、リソースサーバーによってaccess token end pointが呼び出されたときに発生します。これは、アプリケーションが参照トークンを使用する場合(アクセストークンのエンドポイントを呼び出して検証する必要がある場合)、または検証エンドポイントによってJWTの検証が行われた場合に発生します。つまり、認証されたクライアントがリソースサーバー上の保護されたエンドポイントを呼び出すとします。リソースサーバーは、認証サーバー(使用しているIdentityServer実装)でトークンを検証する必要があります。ただし、リソースサーバーから認証サーバーに送信される要求には、認証情報が必要です。リソースサーバーが、認証サーバーとの認証手段として検証しようとしていたのと同じアクセストークンを使用していた場合は、愚かなことです(違反したプロトコル)。だから今問題があります...どのようにリソースサーバーが検証要求で認証情報を送信できますか?
スコープの秘密がここにあります。アイデンティティ・サーバーがこの問題を解決した方法は、スコープ・シークレットを含むスコープを作成できるようにすることです。このスコープは、リソースサーバーの認証オプションに追加されます。例:
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "http://localhost:5000",
ClientId = "api", //The Scope name
ClientSecret = "api-secret", //This is the non hashed/encrypted Scope Secret
RequiredScopes = new[] { "api" } //Must add the Scope name here since it has to be required
});
このスコープを必須にすることで、認証されたクライアントアプリケーションにこのスコープが設定されるようにすることができます。その後IdentityServerに、あなたはそうのような範囲を追加します。
new Scope
{
Name = "api",
DisplayName = "Scope DisplayName",
Description = "This will grant you access to the API",
//The secret here must be Sha256-ed in order for the /introspection end point to work.
//If the API's IdentityServerBearerTokenAuthenticationOptions field is set as so ValidationMode = ValidationMode.ValidationEndpoint,
//then the API will call the /introspection end point to validate the token on each request (instead of ValidationModel.ValidationLocal.
//The ClientSecret must be the NON Sha256-ed string (for example Api = "api-secret" then scope secret must = "spi-secret".Sha256())
//for the token to be validated. There must be a Scope that has the same name as the ClientId field in IdentityServerBearerTokenAuthenticationOptions.
//This is an API authenticates with IdentityServer
ScopeSecrets = new List<Secret>
{
new Secret("api-secret".Sha256())
},
Type = ScopeType.Resource
}
をリソースサーバは、それが単にクライアントとしてクライアントシークレットとしてスコープの秘密とスコープ名を使用するトークンの検証エンドポイントに呼び出しを行いますので、ときイド。