누군가 두 사람의 차이점을 설명해 주실 수 있습니까? 나는 클라이언트 비밀을 이해하지만, 범위 비밀은 여전히 명확하지 않다 ... 왜 스코프 비밀이 존재해야 하는가?IdentityServer3에서 클라이언트 비밀과 범위 비밀의 차이점은 무엇입니까?
어떤 점에서 documentation이 도움이되는 동안이 두 가지 차이점을 설명하는 데 도움이되지 않았습니다.
누군가 두 사람의 차이점을 설명해 주실 수 있습니까? 나는 클라이언트 비밀을 이해하지만, 범위 비밀은 여전히 명확하지 않다 ... 왜 스코프 비밀이 존재해야 하는가?IdentityServer3에서 클라이언트 비밀과 범위 비밀의 차이점은 무엇입니까?
어떤 점에서 documentation이 도움이되는 동안이 두 가지 차이점을 설명하는 데 도움이되지 않았습니다.
클라이언트 비밀은 token endpoint에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 엔드 포인트는 클라이언트 ID와 클라이언트 암호를 사용하며 액세스 토큰을 요청할 수 있습니다.
범위 비밀은 introspection endpoint에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 끝점은 액세스 토큰에 포함 된 범위 만 인트로 스를 허용 할 수 있으므로 범위 ID와 범위 보안을 사용합니다.
Scott Brady 덕분에 질문에 대답 할 수있었습니다. 여기에 나는
클라이언트 비밀
스콧 브래디는 클라이언트 응용 프로그램이 token end point를 호출 할 때, 클라이언트 비밀을 사용하는 말했듯이 ... 발견 무엇. 이렇게하면 인증 된 클라이언트 응용 프로그램 만 끝점에 액세스 할 수 있습니다. 토큰 끝점을 호출하려면 클라이언트 응용 프로그램에 유효한 클라이언트 ID 및 클라이언트 암호가 있어야합니다.
범위의 비밀
그러나 자원 서버가 IdentityServer를 호출 할 필요가 있다면? 리소스 서버에서 access token end point을 호출하면이 문제가 발생합니다. 이것은 응용 프로그램이 참조 토큰을 사용하는 경우 (액세스 토큰 끝점을 호출하여 유효성을 검사해야 함) 또는 유효성 검사 끝점에서 JWT의 유효성을 검사하도록 선택한 경우에 발생합니다. 따라서 인증 된 클라이언트가 리소스 서버의 보호 된 끝점을 호출한다고 가정합니다. 그런 다음 자원 서버는 인증 서버 (사용중인 IdentityServer 구현)로 해당 토큰의 유효성을 검사해야합니다. 그러나 자원 서버에서 인증 서버로 전송 된 요청에는 인증 정보가 있어야합니다. 리소스 서버가 인증 서버와의 인증 방법으로 유효성을 검사하려고 시도한 것과 동일한 액세스 토큰을 사용하는 경우 어리석은 일입니다. 그래서 지금 문제가 있습니다 ... 어떻게 자원 서버가 검증 요청으로 인증 정보를 보낼 수 있습니까?
이것은 범위 비밀이 들어있는 곳입니다. 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
}
를 리소스 서버는 단순히 클라이언트와 클라이언트 비밀로 범위의 비밀과 범위 이름을 사용합니다 토큰 검증 끝 지점에 전화를한다 그래서 때 신분증.