이 문서는 Google Cloud Translation API를 사용해 자동 번역되었습니다.
어떤 문서는 원문을 읽는게 나을 수도 있습니다.
훌륭한 백엔드 애플리케이션을 구축했으며 이제 인증 및 승인을 추가할 차례입니다. 하지만 어디에서 시작합니까?
백엔드 애플리케이션에 대한 인증 및 권한 부여를 구현하는 방법에는 여러 가지가 있습니다. 이 기사에서는 가장 일반적인 방법에 대한 개요를 제공하고 각각에 대한 몇 가지 실용적인 팁을 제공합니다.
인증은 사용자가 자신이 주장하는 사람인지 확인하는 프로세스입니다. 이를 수행하는 가장 일반적인 방법은 사용자 이름과 암호를 사용하는 것입니다.
사용자가 애플리케이션에 로그인을 시도할 때 사용자 이름과 암호가 올바른지 확인해야 합니다. 이는 사용자 데이터베이스 또는 Active Directory와 같은 외부 서비스를 사용하여 수행할 수 있습니다.
사용자 이름과 비밀번호가 정확하면 사용자가 애플리케이션에 액세스하는 데 사용할 수 있는 토큰을 생성해야 합니다. 이 토큰은 사용자에게 고유해야 하며 안전하게 저장되어야 합니다.
토큰을 생성하는 한 가지 방법은 JWT(JSON Web Token)를 사용하는 것입니다. JWT에는 사용자에 대한 정보가 포함되어 있으며 암호로 서명됩니다. 이는 토큰이 변조되지 않았음을 확신할 수 있음을 의미합니다.
JWT를 사용하려면 먼저 비밀을 만들어야 합니다. 이는 openssl과 같은 도구를 사용하여 수행할 수 있습니다.
openssl rand -base64 32
비밀이 있으면 JWT를 만들 수 있습니다.
jwt.sign({ user_id: 1 }, secret, { expiresIn: '1h' })
이렇게 하면 1시간 후에 만료되는 토큰이 생성됩니다. 사용자가 애플리케이션에 요청할 때 이 토큰을 사용하여 사용자를 인증할 수 있습니다.
토큰을 확인하려면 토큰을 만드는 데 사용된 암호가 필요합니다. 그런 다음 이를 사용하여 토큰을 확인할 수 있습니다.
jwt.verify(token, secret)
토큰이 유효하면 사용자가 자신이 주장하는 사람인지 확인할 수 있습니다.
토큰을 생성하는 또 다른 방법은 Auth0과 같은 도구를 사용하는 것입니다. Auth0는 인증 및 권한 부여를 서비스로 제공하는 서비스입니다. 즉, 자체 인증 및 권한 부여 시스템 구축에 대해 걱정할 필요가 없습니다.
Auth0을 사용하면 사용자 이름과 암호로 사용자를 로그인하여 토큰을 만들 수 있습니다. 그런 다음 Auth0은 사용자에 대한 토큰을 생성합니다. 이 토큰은 사용자가 애플리케이션에 요청할 때 사용자를 인증하는 데 사용할 수 있습니다.
토큰을 확인하려면 Auth0 서비스를 사용해야 합니다. 그런 다음 Auth0 서비스를 사용하여 토큰을 확인하고 사용자에 대한 정보를 얻을 수 있습니다.
auth0.verifyToken(token, function(err, user) {
if (err) {
// the token is invalid
} else {
// the token is valid
// you can use the user object to get information about the user
}
})
Auth0은 또한 API 호출에 대한 토큰을 생성하는 방법을 제공합니다. 즉, Auth0을 사용하여 API에 대해 사용자를 인증하고 권한을 부여할 수 있습니다.
권한 부여는 사용자가 특정 리소스에 대한 액세스 권한이 있는지 확인하는 프로세스입니다. 예를 들어 사용자가 파일을 읽을 수는 있지만 쓸 수는 없도록 할 수 있습니다. 또는 사용자가 레코드를 삭제하는 것은 허용하지만 생성하거나 업데이트하는 것은 허용하지 않을 수 있습니다.
권한 부여를 구현하는 두 가지 일반적인 방법은 역할 기반 액세스 제어와 클레임 기반 액세스 제어입니다.
역할 기반 액세스 제어를 사용하면 사용자에게 역할이 할당됩니다. 이 역할은 사용자가 수행할 수 있는 작업을 정의합니다. 예를 들어 사용자는 모든 리소스에 액세스할 수 있는 "관리자" 역할을 가질 수 있습니다. 또는 사용자가 특정 리소스에 대한 액세스만 허용하는 "사용자" 역할을 가질 수 있습니다.
클레임 기반 액세스 제어를 사용하면 사용자에게 하나 이상의 클레임이 할당됩니다. 각 클레임은 사용자가 수행할 수 있는 작업을 정의합니다. 예를 들어 사용자는 리소스를 읽을 수 있도록 허용하는 "can_read" 클레임이 있을 수 있습니다. 또는 사용자가 리소스에 쓸 수 있도록 허용하는 "can_write" 클레임이 있을 수 있습니다.
권한 부여를 구현하려면 사용할 접근 방식을 결정해야 합니다. 대부분의 애플리케이션에 역할 기반 액세스 제어를 사용하는 것이 좋습니다.
사용할 접근 방식을 결정했으면 이를 구현해야 합니다.
역할 기반 액세스 제어를 사용하는 경우 데이터베이스에 역할 테이블을 만들어야 합니다. 이 테이블에는 사용자에게 할당할 수 있는 역할이 포함됩니다. 각 역할에는 이름과 설명이 있습니다.
사용자 테이블도 만들어야 합니다. 이 테이블에는 시스템의 사용자가 포함됩니다. 각 사용자는 역할 테이블의 역할에 해당하는 role_id를 갖게 됩니다.
사용자에게 권한을 부여하려면 역할 테이블에 대해 role_id를 확인해야 합니다. 예를 들어 사용자가 권한이 없는 리소스에 액세스하려고 하면 오류를 반환할 수 있습니다.
if (user.role_id != 1) {
return res.status(403).send('You do not have permission to access this resource');
}
클레임 기반 액세스 제어를 사용하는 경우 데이터베이스에 클레임 테이블을 만들어야 합니다. 이 테이블에는 사용자에게 할당할 수 있는 클레임이 포함됩니다. 각 클레임에는 이름과 설명이 있습니다.
또한 user_claims 테이블을 만들어야 합니다. 이 테이블에는 각 사용자에 대한 클레임이 포함됩니다. 각 클레임에는 users 테이블의 사용자에 해당하는 user_id가 있습니다.
사용자에게 권한을 부여하려면 user_claims 테이블을 확인해야 합니다. 예를 들어 사용자가 권한이 없는 리소스에 액세스하려고 하면 오류를 반환할 수 있습니다.
if (!user_claims.includes('can_read')) {
return res.status(403).send('You do not have permission to access this resource');
}
백엔드 애플리케이션에 대한 인증 및 권한 부여를 구현하는 방법에는 여러 가지가 있습니다. 이 기사에서는 가장 일반적인 방법에 대한 개요를 제공하고 각각에 대한 몇 가지 실용적인 팁을 제공했습니다.
이 문서가 도움이 되었기를 바라며 이제 백엔드 애플리케이션에 대한 인증 및 승인을 구현하는 방법을 더 잘 이해하셨기를 바랍니다.