외부 OAuth2 제공자를 사용한 권한 부여

· 컴포넌트

sgcWebSockets 2022.3.0부터 외부 OAuth2 제공자를 사용해 서버가 받은 요청을 인증할 수 있어요.

OAuth2 Server Provider 컴포넌트를 사용하면 외부 OAuth2 제공자(예: Azure AD, Google, Facebook 등)를 서버 컴포넌트(예: HTTP 서버)에 통합할 수 있어요. 사용자가 Azure AD 자격 증명으로 로그인하고, 인증에 성공하면 HTTP 서버가 보호된 리소스에 대한 접근을 허용할 수 있어요.

OAuth2 Server Provider 흐름 

OAuth2 Provider Server 컴포넌트를 사용하면 외부 OAuth2 제공자(예: Azure AD, Google 등)를 통해 인증하고 서버의 보호된 리소스에 접근할 수 있어요. 예시: HTTP 서버를 설정하고 Azure 자격 증명으로 사용자 로그인을 허용할 수 있어요. 로그인에 성공하면 해당 사용자들이 서버의 보호된 리소스에 접근할 수 있도록 허용해요.

인증 과정은 서버 측에서 처리되며 OAuth2 토큰은 클라이언트와 공유되지 않아요. 즉, 사용자가 예를 들어 Azure로 로그인하면 인증 성공 시 Azure는 사용자 프로필, 이메일 등에 대한 정보를 Azure 서버에 요청할 수 있는 Access Token을 반환해요. 이 Access Token은 클라이언트(예: 웹 브라우저)와 공유되지 않아요. 대신 서버가 Access Token과 내부적으로 연결된 임의의 ID를 생성해요. 클라이언트(웹 브라우저)가 OAuth2 서버를 호출할 때마다 이 공개 ID를 사용하고, 서버는 이 ID로 OAuth2 Access Token을 가져와 HTTP 요청을 프록시해요.

아래에서 OAuth2 인증 동작 방식의 예시를 확인하세요. 이 예시는 다음 링크에서 설명하는 Azure AD 설정을 사용해요: OAuth2 Provider Azure AD.

서버 시작

서버는 localhost 포트 443에서 수신 대기를 시작해요. sgcWebSockets HTTP 서버는 OAuth2 Server Provider 컴포넌트와 연결되며 Authentication 속성이 활성화되어 있어요.

서버가 시작되기 전에 다음 메서드 호출을 사용해 Azure OAuth2 제공자를 등록해요.

RegisterProvider(
'azure',
'90945b8d-f6b7-4b97-b2bd-21c3c90b5f3x',
'PN67Q~5m06c-~X_GMyMf9zMntmm5l2dt~3jVq',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize',
'https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token',
'user.read',
'/login',
'https://localhost/callback'
);

사용자 로그인

사용자가 새 웹 브라우저를 열고 '/login' 엔드포인트로 이동해요.

서버는 '/login' 엔드포인트가 Azure 제공자로 로그인하는 데 사용된다는 것을 감지하고 다음으로 리디렉션해요.

https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/authorize

이렇게 OAuth2 인증 흐름이 시작돼요.

OAuth2 인증

사용자는 OAuth2 서버 인증 엔드포인트로 리디렉션되고, 자격 증명으로 로그인하고 OAuth2 애플리케이션의 약관에 동의해야 해요.

권한 부여가 성공하면 Azure AD가 다음 URL로 코드를 전송해요.

https://localhost/callback

OAuth2 코드 검증

이제 서버는 Azure로부터 코드를 받았으며, 서버 간 내부 연결로 Azure에 접속해 이 토큰이 올바른지 검증해요(누군가 서버를 해킹하려는 것을 방지하기 위해).

서버는 다음에 연결해요.

https://login.microsoftonline.com/a0ca2055-5dd1-467f-bf13-291f6fd715c6/oauth2/v2.0/token

받은 코드와 clientsecret 같은 일부 매개변수를 전달하고, 검증이 성공하면 Azure는 프로필, 이메일 등 Azure 보호 리소스에 접근하는 데 사용할 수 있는 Access Token을 반환해요.

Access Token 성공

서버가 AccessToken을 성공적으로 받으면 OnOAuth2ProviderTokenValid 이벤트가 호출돼요. 여기서 매개변수 클래스 TsgcHTTPOAuth2ProviderToken에 접근해 AccessToken을 저장하는 방법을 설정할 수 있어요.

AccesToken: Azure가 반환한 OAuth2 토큰이에요.

ID: 쿠키로 저장되는 공개 식별자예요.

이 이벤트에서 인증 성공 후 수행할 작업을 설정할 수 있어요. 예를 들어 사용자를 비공개 URL로 리디렉션하려면 다음을 사용하세요.

Response.Redirect.URL := 'https://localhost/private';

Azure에 요청 보내기

이제 쿠키로 저장된 공개 ID를 사용해 Azure 서버에 요청을 보낼 수 있어요.

예를 들어 프로필 데이터를 읽으려면 다음 메서드를 사용하세요.

Get('ID', 'https://graph.microsoft.com/v1.0/me');

여기서 ID는 공개 ID 식별자예요.

Windows용 OAuth2 Azure AD 컴파일 데모 다운로드