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:
OAuth2-Autorisierungsprozess umfasst die folgenden Schritte:
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.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 RessourcenbesitzersDer 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.
<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>
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!