>  기사  >  백엔드 개발  >  Java 백엔드 개발: API 다중 역할 권한 관리를 위해 Java 인증 및 권한 부여 서비스 사용

Java 백엔드 개발: API 다중 역할 권한 관리를 위해 Java 인증 및 권한 부여 서비스 사용

WBOY
WBOY원래의
2023-06-17 10:27:251217검색

인터넷이 발전함에 따라 다양한 웹 애플리케이션과 API의 애플리케이션 시나리오가 점점 더 광범위해지고 있으며 API 다중 역할 권한 관리가 점점 더 중요한 주제가 되었습니다. Java 백엔드 개발에서 JAAS(Java Authentication and Authorization Service)는 API 인터페이스에 대한 액세스 권한을 쉽게 관리할 수 있는 역할 기반 권한 제어 메커니즘을 제공하는 안정적인 솔루션입니다.

Java 개발에서 JAAS 프레임워크는 Java Authentication and Authorization Service의 약어이며 Java SE 표준 API 중 하나이며 주로 애플리케이션의 인증 및 권한 부여에 사용됩니다. JAAS 프레임워크의 핵심 개념은 프로그램에서 다양한 사용자 유형과 액세스 정책을 식별하고 관리하는 데 사용되는 구성 및 정책 소스입니다.

JAAS 프레임워크는 Subject와 LoginModule이라는 두 가지 주요 추상화를 제공합니다. 주체는 프로그램의 사용자 또는 사용자 그룹을 나타내며 LoginModule은 인증 및 권한 부여의 특정 구현입니다. JAAS 프레임워크는 이러한 두 가지 추상화를 통해 역할 기반 권한 제어 메커니즘을 구현합니다.

JAAS 프레임워크를 사용하여 API 역할 권한 관리를 구현하는 방법을 살펴보겠습니다.

  1. JAAS 구성

먼저 JAAS를 구성해야 합니다. 프로젝트에서 구성 파일을 생성할 수 있습니다(예: jaas.conf) 구성 파일의 내용은 다음과 같습니다.

Sample {
    com.example.security.SimpleLoginModule required;
};

위 구성에서 Sample은 프로그램 이름이고 com.example.security.SimpleLoginModule은 LoginModule 인터페이스를 구현하는 클래스 이름입니다.

  1. LoginModule 인터페이스 구현

다음으로 사용자를 인증하고 권한을 부여하기 위해 LoginModule 인터페이스를 구현하는 클래스를 구현해야 합니다. 코드 예시는 다음과 같습니다.

package com.example.security;

import java.util.Map;
import javax.security.auth.Subject;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.NameCallback;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import javax.security.auth.login.LoginException;
import javax.security.auth.spi.LoginModule;

public class SimpleLoginModule implements LoginModule {

    private Subject subject;
    private CallbackHandler callbackHandler;
    private Map<String, ?> sharedState;
    private Map<String, ?> options;
    private String username;

    public void initialize(
        Subject subject,
        CallbackHandler callbackHandler,
        Map<String, ?> sharedState,
        Map<String, ?> options
    ) {
        this.subject = subject;
        this.callbackHandler = callbackHandler;
        this.sharedState = sharedState;
        this.options = options;
    }

    public boolean login() throws LoginException {
        Callback[] callbacks = new Callback[2];
        callbacks[0] = new NameCallback("username: ");
        callbacks[1] = new PasswordCallback("password: ", false);

        try {
            callbackHandler.handle(callbacks);

            String username = ((NameCallback) callbacks[0]).getName();
            String password = String.valueOf(((PasswordCallback) callbacks[1]).getPassword());

            // 验证用户名和密码,通过返回true
            if ("admin".equals(username) && "123456".equals(password)) {
                this.username = username;
                return true;
            } else {
                throw new LoginException("Invalid username or password");
            }
        } catch (UnsupportedCallbackException | IOException e) {
            e.printStackTrace();
            throw new LoginException(e.getMessage());
        }
    }

    public boolean commit() throws LoginException {
        subject.getPrincipals().add(new SimplePrincipal(username));
        return true;
    }

    public boolean abort() throws LoginException {
        return true;
    }

    public boolean logout() throws LoginException {
        subject.getPrincipals().removeIf(principal -> principal.getName().equals(username));
        return true;
    }

}

그 중 LoginModule 인터페이스에 메소드를 구현하여 사용자 인증 및 권한 부여를 구현합니다. 로그인 메소드에서는 CallbackHandler를 사용하여 사용자가 입력한 사용자 이름과 비밀번호를 얻고 이를 인증합니다. 커밋 메소드에서는 후속 역할 인증을 위해 사용자 정보를 주제에 추가합니다.

  1. 역할 권한 부여 구현

다음으로 특정 API 인터페이스에 대해 역할 권한 부여를 수행해야 합니다. 인증을 위해 Java EE에서 제공하는 다음과 같은 주석을 사용할 수 있습니다.

@RolesAllowed({"admin","user"})
@Path("/api/hello")
public class HelloResource {

    @GET
    public Response greet() {
        return Response.ok("Hello World!").build();
    }

}

위의 예에서는 @RolesAllowed 주석을 사용하여 API의 액세스 역할을 지정하고 관리자 및 사용자 역할을 가진 사용자만 API에 액세스할 수 있습니다. 상호 작용.

  1. 애플리케이션 서버 구성

마지막으로 애플리케이션 서버에 JAAS 지원을 추가하려면 server.xml에 다음 구성을 추가하면 됩니다.

<server>
  ...
  <featureManager>
    ...
    <feature>appSecurity-2.0</feature>
  </featureManager>
  ...
</server>

web.xml에 다음 코드를 추가하세요.

<login-config>
  <auth-method>FORM</auth-method>
  <realm-name>sampleRealm</realm-name>
  <form-login-config>
    <form-login-page>/login.html</form-login-page>
    <form-error-page>/error.html</form-error-page>
  </form-login-config>
</login-config>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>helloResource</web-resource-name>
    <url-pattern>/api/hello</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>admin</role-name>
    <role-name>user</role-name>
</auth-constraint>

위에서 구성에서 FORM 인증 방법 사용을 지정하고 페이지에 해당 페이지를 제공했습니다. 동시에 /hello API의 역할을 승인하려면 보안 제약 조건도 지정해야 합니다.

이제 API 다중 역할 권한 관리 구성이 완료되었습니다.

Summary

JAAS 프레임워크는 Java Authentication and Authorization Service의 약어이며 Java SE 표준 API 중 하나이며 주로 애플리케이션을 인증하고 권한을 부여하는 데 사용됩니다. Java 백엔드 개발에서 API 다중 역할 권한 관리를 위한 JAAS 프레임워크를 사용하면 역할 권한 부여를 쉽게 구현할 수 있습니다. 구성 및 정책 소스를 통해 역할 기반 권한 제어 메커니즘을 구현하고 ID 인증 및 권한 부여를 위해 LoginModule 인터페이스를 사용했으며 API 역할 권한 부여를 위해 주석을 사용했습니다. 애플리케이션 서버를 구성하여 마침내 API 다중 역할 권한 관리를 구현했습니다.

위 내용은 Java 백엔드 개발: API 다중 역할 권한 관리를 위해 Java 인증 및 권한 부여 서비스 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.