Heim  >  Artikel  >  Java  >  Verwendung der OAuth2-Authentifizierung in der Java-API-Entwicklung

Verwendung der OAuth2-Authentifizierung in der Java-API-Entwicklung

王林
王林Original
2023-06-18 11:49:371477Durchsuche

Bei der Entwicklung der Java-API ist die Authentifizierung ein unvermeidliches Problem. OAuth2 ist eine beliebte Authentifizierungsmethode, die API-Ressourcen durch Zugriffsgewährung schützt. In diesem Artikel wird erläutert, wie Sie OAuth2 zur Authentifizierung in der Java-API-Entwicklung verwenden.

Wir stellen vor: OAuth2

OAuth2 ist ein offener Standard für die Autorisierung, der es Benutzern ermöglicht, Anwendungen von Drittanbietern den Zugriff auf ihre Serverressourcen zu autorisieren, ohne ihre Anmeldeinformationen weitergeben zu müssen. Der OAuth2-Standard umfasst die folgenden Rollen:

  • Ressourcenbesitzer: der Ressourcenbesitzer, also der Benutzer;
  • Ressourcenserver: der Ressourcenserver, der Server, der Ressourcen bereitstellt;
  • Client: der Client, also ein Drittanbieteranwendung;
  • Autorisierungsserver: Autorisierungsserver, der zum Ausstellen von Zugriffstokens verwendet wird.

OAuth2-Autorisierungsprozess umfasst die folgenden Schritte:

  • Client sendet Autorisierungsanfrage an Autorisierungsserver;
  • Autorisierungsserver fordert Autorisierung vom Ressourcenbesitzer an;
  • Nach der Autorisierung sendet der Autorisierungsserver ein Zugriffstoken an den Client verwendet das Zugriffstoken, um eine Anfrage an den Ressourcenserver zu senden.
  • Der Ressourcenserver überprüft das Zugriffstoken und stellt Ressourcen bereit.
  • OAuth2 unterstützt mehrere Autorisierungstypen, einschließlich Autorisierungscodemodus, Passwortmodus, Clientmodus, impliziter Autorisierungsmodus usw. Bei der Java-API-Entwicklung werden normalerweise der Autorisierungscodemodus und der Passwortmodus verwendet.

OAuth2-Autorisierungscodemodus

Der Autorisierungscodemodus ist der am häufigsten verwendete Autorisierungstyp in OAuth2. Er umfasst die folgenden Schritte:

Client sendet eine Autorisierungsanfrage an den Autorisierungsserver, einschließlich Client-ID und Umleitungs-URI; sendet die Anmeldeseite an den Ressourceneigentümer.
  • Nach der Autorisierung durch den Ressourceneigentümer sendet der Autorisierungsserver den Autorisierungscode an den Umleitungs-URI.
  • Der Client sendet den Autorisierungscode eine Anfrage an den Autorisierungsserver, einschließlich Client-ID und Client-Geheimnis;
  • Der Autorisierungsserver überprüft die Client-ID und das Client-Geheimnis und stellt, falls korrekt, ein Zugriffstoken an den Client aus.
  • Der Client verwendet das Zugriffstoken, um eine Anfrage zu senden der Ressourcenserver.
  • In der Java-API-Entwicklung können Sie das Spring Security OAuth2-Framework verwenden, um die Authentifizierung im Autorisierungscodemodus zu implementieren.
  • Zuerst müssen Sie die folgenden Abhängigkeiten im POM hinzufügen: /api/** ist der Pfad, der eine Authentifizierung erfordert.

Wenn Sie OAuth2RestTemplate zum Senden einer Anfrage verwenden, müssen Sie zuerst ein Zugriffstoken erhalten. Der Code lautet wie folgt:

<dependency>
    <groupId>org.springframework.security.oauth</groupId>
    <artifactId>spring-security-oauth2</artifactId>
    <version>2.3.4.RELEASE</version>
</dependency>

Dabei ist der Client ein Objekt vom Typ OAuth2ProtectedResourceDetails, das Informationen wie Client-ID und Client-Geheimnis enthält.

OAuth2-Passwortmodus

Der Passwortmodus ist ein Autorisierungstyp in OAuth2, der für vertrauenswürdige Clients geeignet ist. Er umfasst die folgenden Schritte:

Der Client sendet eine Anfrage an den Autorisierungsserver, einschließlich Client-ID, Client-Geheimnis und Benutzername und Passwort des Ressourcenbesitzers

Der Autorisierungsserver überprüft die Client-ID, das Client-Geheimnis sowie den Benutzernamen und das Passwort und stellt dem Client ein Zugriffstoken aus.

Der Client verwendet das Zugriffstoken, um eine Anfrage an den Ressourcenserver zu senden.

    In der Java-API-Entwicklung können Sie das Spring Security OAuth2-Framework verwenden, um die Authentifizierung im Passwortmodus zu implementieren.
  • Zuerst müssen Sie die folgenden Abhängigkeiten im POM hinzufügen: /api/** ist der Pfad, der eine Authentifizierung erfordert.
  • Wenn Sie OAuth2RestTemplate zum Senden einer Anfrage verwenden, müssen Sie zuerst das Zugriffstoken erhalten. Der Code lautet wie folgt:
  • <security:http pattern="/oauth/token" create-session="stateless"
        authentication-manager-ref="authenticationManager"
        xmlns="http://www.springframework.org/schema/security">
        <security:intercept-url pattern="/oauth/token" access="isAuthenticated()" method="POST" />
        <security:anonymous enabled="false" />
        <security:http-basic entry-point-ref="clientAuthenticationEntryPoint" />
        <security:custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" />
        <security:access-denied-handler ref="oauthAccessDeniedHandler" />
    </security:http>
    
    <security:http pattern="/api/**" create-session="never"
        entry-point-ref="oauthAuthenticationEntryPoint"
        access-decision-manager-ref="accessDecisionManager"
        xmlns="http://www.springframework.org/schema/security">
        <security:anonymous enabled="false" />
        <security:intercept-url pattern="/api/**" access="ROLE_USER" />
        <security:custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" />
        <security:access-denied-handler ref="oauthAccessDeniedHandler" />
    </security:http>
    
    <bean id="clientAuthenticationEntryPoint"
        class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
        <property name="realmName" value="spring-boot-oauth2" />
        <property name="typeName" value="Basic" />
    </bean>
    
    <bean id="oauthAuthenticationEntryPoint"
        class="org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint">
        <property name="realmName" value="spring-boot-oauth2" />
        <property name="typeName" value="Bearer" />
    </bean>
    
    <bean id="oauthAccessDeniedHandler"
        class="org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler" />
    
    <bean id="clientCredentialsTokenEndpointFilter"
        class="org.springframework.security.oauth2.provider.client.ClientCredentialsTokenEndpointFilter">
        <property name="authenticationManager" ref="authenticationManager" />
    </bean>
    
    <bean id="resourceServerFilter"
        class="org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter">
        <property name="authenticationManager" ref="authenticationManager" />
    </bean>
    
    <bean id="accessDecisionManager"
        class="org.springframework.security.access.vote.UnanimousBased"
        xmlns="http://www.springframework.org/schema/beans">
        <constructor-arg>
            <list>
                <bean class="org.springframework.security.oauth2.provider.vote.ScopeVoter" />
                <bean class="org.springframework.security.access.vote.RoleVoter" />
                <bean class="org.springframework.security.access.vote.AuthenticatedVoter" />
            </list>
        </constructor-arg>
    </bean>
    
    <security:authentication-manager id="authenticationManager">
        <security:authentication-provider user-service-ref="userDetailsService" />
    </security:authentication-manager>
    
    <bean id="userDetailsService"
        class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
        <property name="dataSource" ref="dataSource" />
    </bean>
  • Unter diesen befindet sich ein Objekt vom Typ ResourceOwnerPasswordResourceDetails, einschließlich Client-ID, Client-Geheimnis, Benutzername und Passwort und andere Informationen.

Zusammenfassung

Die Verwendung von OAuth2 zur Authentifizierung in der Java-API-Entwicklung kann die Sicherheit von API-Ressourcen schützen und es Benutzern erleichtern, Anwendungen von Drittanbietern den Zugriff auf ihre Serverressourcen zu autorisieren. In diesem Artikel werden der Autorisierungscodemodus und der Kennwortmodus von OAuth2 vorgestellt und Beispielcode für die Implementierung der Authentifizierung mithilfe des Spring Security OAuth2-Frameworks bereitgestellt. Ich hoffe, es kann für Java-API-Entwickler hilfreich sein.

Das obige ist der detaillierte Inhalt vonVerwendung der OAuth2-Authentifizierung in der Java-API-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn