Wie kann ich definieren von Richtlinien für meine API für zwei Arten von access-Token, mit einer Identität, die (sub) und eine ohne?

Ich bin mit IdentityServer4 über ASPNET-Core, und ich möchten, dass Benutzer Zugriff auf meine API-sowohl vom web-browser über Ihre Identität (Implizite und Hybrid), und werden von clients über ein Programm (Client-Anmeldeinformationen). Ich merke alles, was ich zu tun ist, fügen Sie AddIdentityServerAuthentication und ich bin fertig. Aber das löst nur die Authentifizierung Aspekt des Problems, nicht die Autorisierung.

Autorisierung:

Mit ASPNET-Core können Sie nur verwenden, Role based auth (oder PolicyServer Berechtigungen, die ähnlich ist), aber nur, wenn Sie eine Identität mit der Rolle, die behauptet, dass nicht Arbeit für client-Anmeldeinformationen. Dies bringt uns zu benötigen, um sicher durch die Rolle oder die Richtlinien UND Bereiche. Wie kann ich dies tun?

  • Sie nicht haben mehrere Richtlinien, wenn Sie tun, werden Sie beide müssen bestanden werden.
  • Sie können nicht mehrere auth schemes, weil mein Aufruf AddIdentityServerAuthentication, die mit der gleichen Autorität, wie IdentityServer4.AccessTokenValidation/JwtBearer wissen, die Sie scheme Herausforderung, die Sie versuchen zu bestehen?
  • Mehrere Anforderungen funktionieren könnte, aber müssen Sie fügen Sie zusätzliche Anforderungen an die Bedingung, dass Sie den Umgang mit non-identity access token. Wie können Sie erkennen, welche Art von token Sie zu tun? Ist es sicher zu einfach zu sagen: "Wenn kein sub, das ist client-creds."
  • Sollte ich Schrott, das design und die Kraft des Geräte-Codes fließen über meine Nutzer? Schauen az cli es magisch öffnet sich ein browser, und dann können Sie beginnen, scripting Weg zu Ihrem Herzen Inhalt. IS4 unterstützt dies mit Leichtigkeit, vor allem mit verficationUrlComplete

Ich denke, ich habe einen POC, aber ich bin weit davon entfernt glücklich mit ihm. https://gist.github.com/VictorioBerra/8c333a228c55d86a7c15f7f300284634

Es beinhaltet im wesentlichen eine re-Implementierung der Standard-Umfang Anspruch Voraussetzung handler und policyservers Berechtigung Anforderung handler. Aber das ist der einzige Weg, um bedingt anwenden, die Anforderung Handler auf der Grundlage der token-Typ.

1 Antworten

  • Vidmantas Blazevicius
    4. Mai 2019

    Es gibt zumindest ein paar Möglichkeiten, wie Sie gehen, um Ihr problem zu implementieren rollenbasierter Authentifizierung:

    • Haben Sie vielleicht falsch verstanden, die Tatsache, dass ein AUFTRAGGEBER haben kann role Ansprüche client_credentials flow.
    • Man hätte auch sub geltend machen, wenn Sie umgesetzt client_credentials_custom flow und im wesentlichen die Bindung eines Kunden an ein bestimmtes Benutzerkonto (denken Sie an dieses als service account)