2017-01-24 2 views
1

Planung zur Einrichtung eines IdentityServer und haben es für mehrere Ressourcen konfiguriert wie:Multiple Api Ressourcen

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") 
       } 
      } 
     }; 
} 

dann Client 1 wird ein Zugriff auf API haben 1 nur und Client 2 wird ein Zugriff auf API-2 nur haben. Beide Clients haben den öffentlichen Bereich.

Würde etwas wie oben funktionieren oder sollte ich den Namen der Bereiche ändern und es für die einzelnen API-Ressourcen eindeutig machen?

Ist die Verwendung von 1 Identity/Authorization Server für mehrere APIs eine schlechte Idee?

Antwort

2

Das Hauptproblem mit diesem Design ist, dass Client 1 und Client 2 beide die gleichen Bereiche in ihren Träger Token haben. Dh beide Clients haben Zugriff auf beide API-Ressourcen. Sie könnten „Namensraum“ Ihre Bereiche von API so etwas wie dies zu tun:

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") 
       } 
      } 
     }; 
} 

aber sagt, dass es nichts falsch mit der Verwendung von 1 Autorisierungsserver für eine Vielzahl von APIs/Ressourcen ist. Die Verwendung von 1 Autorisierungsserver für eine Vielzahl von APIs ist eine der Stärken, Ihre Autorisierungsanliegen auf den Identitätsserver zu verteilen.

+0

Das ist, was ich auch denke, aber nicht der Client/Consumer muss der Umfang so konfiguriert haben: "Scope = api2.public". Ist das akzeptabel? Um den API-Namen freizulegen? – gnaungayan

+0

absolut, das ist in Ordnung. Sie können die Bereiche aus dem Erkennungsdokument ('.well-known/openid-configuration') ausblenden, wenn Sie nicht möchten, dass sie für die Öffentlichkeit (' Scope.ShowInDiscoveryDocument = false') sofort sichtbar sind, sondern am Ende der Jeden Tag muss jeder Client seinen speziellen Bereichen ausgesetzt werden. – Lutando