OAuth2 Provider | Authentication

OAuth2 Provider Server 구성 요소를 사용하면 외부 OAuth2 공급자(예: Azure AD 또는 Google)를 사용하여 인증하여 서버의 보호된 리소스에 접근할 수 있습니다. 예제: 사용자가 Azure 자격 증명을 사용하여 로그인할 수 있도록 HTTP 서버를 구성할 수 있습니다. 로그인이 성공하면 해당 사용자는 서버의 보호된 리소스에 접근할 수 있습니다.

 

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

 

아래에서 OAuth2 Authentication이 작동하는 방식의 예를 확인하십시오. 이 예제는 다음 링크 OAuth2 Provider Azure AD에 설명된 Azure AD 구성을 사용합니다.

 

서버 시작

 

서버는 localhost와 포트 443에서 수신을 시작합니다. sgcWebSockets HTTP Server는 OAuth2 Server Provider Component에 연결되어 있고 Authentication 속성이 활성화되어 있습니다.

서버가 시작되기 전에 다음 메서드 호출을 사용하여 Azure OAuth2 Provider가 등록됩니다.

 

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 Authentication

 

사용자는 OAuth2 Server Authentication Endpoint로 리디렉션되며, 이제 자격 증명을 사용하여 로그인하고 OAuth2 애플리케이션의 약관을 수락해야 합니다.

 

권한 부여가 성공하면 Azure AD가 url로 Code를 보냅니다

 

https://localhost/callback

 

OAuth2 Code 검증

 

이제 서버는 Azure로부터 코드를 수신했으며, 이 토큰이 올바른지 검증하기 위해 Azure에 내부 연결(서버에서 서버로)을 수행합니다(누군가 서버를 해킹하려는 것을 방지하기 위해).

 

서버가 연결하는 대상:

 

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

 

수신된 code 및 clientsecret과 같은 일부 매개변수를 전달하여 검증이 성공하면 Azure는 프로필 읽기, 이메일 등 Azure 보호 리소스에 액세스하는 데 사용할 수 있는 Access Token을 반환합니다.

 

성공적인 Access Token

 

서버가 성공적인 AccessToken을 수신하면, OnOAuth2ProviderTokenValid 이벤트가 호출되므로, 여기서 매개변수 클래스 TsgcHTTPOAuth2ProviderToken에 액세스하여 AccessToken이 저장되는 방법(저장되는 경우)을 구성할 수 있습니다

 

AccesToken: Azure가 반환한 OAuth2 Token입니다.

ID: 쿠키로 저장되는 공개 식별자입니다.

 

이 이벤트에서 성공적인 인증 후 수행할 작업을 구성할 수 있습니다. 예: 사용자를 비공개 url로 리디렉션하려면 다음을 사용하십시오

 

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

 

Azure에 요청 보내기

 

이제 쿠키로 저장된 Public ID를 사용하여 Azure 서버에 요청을 보낼 수 있습니다.

예: 프로필 데이터를 읽으려면 다음 메서드를 사용하십시오.

 

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

 

여기서 ID는 public ID 식별자입니다.