2017-01-24 3 views
1

계획 여러 설정 한 IdentityServer과 같이 여러 자원에 대해 구성한 :API 광고 자원

internal static IEnumerable<ApiResource> GetApiResources() 
{ 
     return new List<ApiResource> 
     { 
      new ApiResource() 
      { 
       Name = "API 1", 
       DisplayName = "API 1", 
       Description = "API 1 Access", 
       Scopes = new List<Scope>() 
       { 
        new Scope("public"), new Scope("write") 
       } 
      }, 
      new ApiResource 
      { 
       Name = "API 2", 
       DisplayName = "API 2", 
       Description = "API 2 Access", 
       Scopes = new List<Scope> 
       { 
        new Scope("public"), new Scope("write") 
       } 
      } 
     }; 
} 

는 다음 클라이언트 1 API 2 단지에 액세스 할 수 있습니다 API 1 만 클라이언트 2에 액세스 할 수 있습니다. 두 클라이언트 모두 공용 범위를 갖습니다.

위와 같은 작업이 가능하거나 범위 이름을 변경하여 각 API 리소스에 고유하게 사용해야합니까?

하나의 ID/Authorization Server를 여러 API에 사용하는 것은 좋지 않은 생각입니까?

답변

2

이 디자인의 주요 문제점은 클라이언트 1과 클라이언트 2가 모두 자신의 무기명 토큰 범위가 동일하다는 점입니다. 즉 두 클라이언트 모두 두 API 리소스 중 하나에 액세스 할 수 있습니다. 이 같은 일을 API하여 범위를 "네임 스페이스"수 :

말했다되고 그건
internal static IEnumerable<ApiResource> GetApiResources() 
{ 
     return new List<ApiResource> 
     { 
      new ApiResource() 
      { 
       Name = "API 1", 
       DisplayName = "API 1", 
       Description = "API 1 Access", 
       Scopes = new List<Scope>() 
       { 
        new Scope("api1.public"), new Scope("api1.write") 
       } 
      }, 
      new ApiResource 
      { 
       Name = "API 2", 
       DisplayName = "API 2", 
       Description = "API 2 Access", 
       Scopes = new List<Scope> 
       { 
        new Scope("api2.public"), new Scope("api2.write") 
       } 
      } 
     }; 
} 

, API를/자원의 군중 1 개 인증 서버를 사용하여 아무 문제가 없다. 다수의 API에 1 개의 권한 서버를 사용하는 것은 권한 문제를 신원 서버와 구분하는 장점 중 하나입니다.

+0

내가 뭘 생각하고 있지만 클라이언트/소비자는 다음과 같이 범위를 구성해야합니다. "scope = api2.public". 그게 받아 들일 수 있니? API 이름을 공개 하시겠습니까? – gnaungayan

+0

절대적으로 이것은 괜찮습니다. public ('Scope.ShowInDiscoveryDocument = false')에서 쉽게 볼 수 없으면 검색 문서 ('.well-known/openid-configuration')에서 스코프를 숨길 수 있습니다. 각 클라이언트는 특정 범위 세트에 노출되어야합니다. – Lutando