1

Wir erstellen eine Anwendung mit folgenden technischen Daten entschieden.OAuth 2.0 mit Implict Grant-Typ Spring-Boot-App

  • Angular 4/5 [Front End]
  • SpringBoot Rahmen [BackEnd]
  • OAuth 2.0 [Berechtigung]
  • MySQL [Datenbank]

Hinweis: Wir selbst haben Resource Server, Authorization Server


Fluss

Wir bieten eine einzelne Instanz Anwendung für mehrere Clients [unsere Kunden], die ihre eigenen Nutzer haben wird. Jeder Benutzer erhält eine E-Mail, um über unsere Anwendung ein paar Dinge für seine jeweiligen Kunden zu autorisieren. Der E-Mail-Link enthält client_id, record_id verschlüsselt und codiert. Wenn der Benutzer auf den Link klickt, sollte er zu AuthServer gehen, den Client über seine client_id autorisieren und das Token an den Benutzeragenten zurückgeben, um weitere Operationen auszuführen.

Wir gingen durch diese Github repo und implementiert das gleiche wie das Beispiel.

Der AuthServer Configure Code ist wie folgt:

@Override 
public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
     clients.inMemory().withClient("my-trusted-client") 
      .authorizedGrantTypes("password", "authorization_code", 
          "refresh_token", "implicit") 
      .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT") 
      .scopes("read", "write", "trust").resourceIds("sparklr") 
      .accessTokenValiditySeconds(60).and() 
      .withClient("my-client-with-registered-redirect") 
     .authorizedGrantTypes("authorization_code").authorities("ROLE_CLIENT") 
      .scopes("read", "trust").resourceIds("sparklr") 
      .redirectUris("http://anywhere?key=value").and() 
      .withClient("my-client-with-secret") 
      .authorizedGrantTypes("client_credentials", "password") 
        .authorities("ROLE_CLIENT").scopes("read").resourceIds("sparklr") 
      .secret("secret"); 

} 

Wir haben einige Zweifel an den Werten der configure-Methode übergeben.

  • Was steht hier für .inMemory().withClient("my-trusted-client")? Wird dies immer fest codiert sein? Da wir jeden Client basierend auf der erhaltenen client_id validieren würden, wo werden wir diesen füttern, um ihn dynamisch zu validieren?
  • Was ist .withClient("my-client-with-registered-redirect") für? Auch das bleibt für jeden Kunden gleich?
  • Der Autor im Repo hat auch gesagt, dass wir das Setup über $ curl -H "Accept: application/json" my-client-with-secret:[email protected]:8080/oauth/token -d grant_type=client_credentials validieren können und ich sehe my-client-with-secret:secret hier übergeben. Wenn dies für verschiedene Kunden geändert werden wird, wie kann ich diesen Wert geben .withClient("my-client-with-secret") und .secret("secret")

Wir sind total harte Zeit, diese Konzepte zu verstehen. Unsere Anforderung ist einfach, Wir werden jeden Client mit client_id validieren und ein Token für diesen Client generieren. Müssen wir andere Grant_types für diese Art von Anforderungen haben?

Jemand bitte zeigen Sie uns in die richtige Richtung.

Antwort

1

Erste Frage: In Ihrem Beispiel werden die Kunden fest einprogrammiert (daher die clients.inMemory()).Sie können eine Datenquelle konfigurieren und zu verwenden, dass:

@Autowired 
DataSource dataSource; 

@Override 
public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
    clients.jdbc(dataSource); // Get clients from database, table = oauth_client_details 
} 

Sie weitere Informationen in der documentation

Zweite Frage Im Beispiel finden, drei Clients konfiguriert sind:

  1. my-trusted-client: Diese Der Client kann die Verwendung dieser OAuth2-Flüsse autorisieren: "password", "authorization_code", "refresh_token", "implicit"
  2. my-client-with-registered-redirect: Dieser Client kann usi autorisieren ng diese OAuth2 fließt: "authorization_code"
  3. my-client-with-secret: dieser Client autorisieren kann über diese OAuth2 fließt: "client_credentials"

Sie müssen den Unterschied zwischen diesen Strömungen verstehen.

Dritte Frage, wenn Sie andere Clients verwenden möchten, müssen Sie diese in Ihrem Code/Datenbank hinzufügen

+0

Danke so viel .. Es meisten der Zweifel gelöscht ... :) –