Skip to main content

MAC 어댑터 추가하기

MAC(메시지 인증 코드)은 SSO 요청의 무결성을 확인하는 데 사용되는 방법입니다. MAC 생성 로직을 소스 시스템에서 개발해야 하고, UAS 서비스가 검증할 수 있어야 합니다.

UAS 설정 구성하기

UAS 설정 화면에서 인증 어댑터 추가를 선택하십시오. 필드를 다음과 같이 작성하십시오:

필드

설명

별명

이 어댑터는 고유한 이름을 가지고 있으며 URL에서 사용됩니다. 별칭은 모두 소문자로 저장되어야 하며 특수한 URL 문자를 포함해서는 안 됩니다.

사용

어댑터 사용 가능 여부를 이 토글이 결정합니다.

인증 유형

MAC

아웃바운드 어댑터 사용 중

외부 서비스로의 아웃바운드 인증에 사용될 인증 어댑터를 선택하십시오 선택하지 않으면, 기본 아웃바운드 어댑터가 사용됩니다.

디버그 활성화됨

이 토글은 문제 해결을 위해 디버그 구문이 로그에 기록될지 여부를 결정합니다.

제한된 사용자

사용할 수 없는 사용자 이름을 쉼표로 구분하여 어댑터 목록에 입력하세요.

의 기본 원칙을 이해하는 것은 컴퓨터 과학에서 매우 중요합니다.

  • 기존 MD5 알고리즘을 선택하십시오.

  • 더 안전한 SHA-256 알고리즘을 선택하십시오.

매개 변수

매개변수 이름과 표준 값 사이의 매핑입니다. 예를 들어, 제공하신 쿼리 문자열에 'time'이라는 매개변수 값이 있으며, 이는 예상되는 'Timestamp' 값으로 매핑되어야 합니다.

인증

매개변수에는 MAC 인증 서명이 포함되어 있습니다. 권장 가치: 인증

타임스탬프 GMT

매개변수에는 타임스탬프가 포함됩니다. 권장 가치: 타임스탬프

사용자 ID

사용자 ID(사용자의 사용자 이름 또는 batch_uid/외부 ID)를 포함하는 매개변수입니다. 이는 Blackboard에서 SAML 인증 공급자를 어떻게 구성하느냐에 따라 달라집니다. 권장 가치: userID

코스 ID

매개변수에는 강의 ID가 포함됩니다. 이는 Blackboard 내부 강좌 식별자(_9999_1 형식) 또는 batch_uid/외부 ID가 될 수 있습니다. 시스템은 내부 강의 식별자로 보이는 모든 것을 외부 ID로 처리합니다. 권장 가치: courseId

전달

Learn에서 전달할 URL을 포함하는 매개변수입니다. 호스트 이름이 Blackboard 포함될 수도 있고 포함되지 않을 수도 있습니다. 권장 가치: 미래를 위하여

타임스탬프 델타

요청이 생성된 시점과 인증 어댑터 서비스가 수신한 시점 사이에 허용되는 타임스탬프 차이는 밀리초 단위입니다. 권장 가치: 10,000-60,000

MAC 파람

여기에 나열된 추가 매개변수는 MAC 계산에 포함되며 사용자 ID와 타임스탬프도 항상 포함됩니다.

비밀

공유 키는 MAC 계산에 사용됩니다.

  • 비밀번호는 255자를 초과할 수 없습니다.

  • 비밀번호에는 탭, 제어 문자 또는 줄바꿈 문자를 포함할 수 없습니다.

  • 공유 비밀번호는 대소문자를 구분합니다.

  • 공유 비밀번호는 정기적으로 변경하는 것이 좋습니다.

  • 공유하는 비밀번호를 길게 설정하고 숫자 및 대소문자를 조합하여 추측하기 어렵게 만드세요.

공유 비밀은 원격 시스템의 안전한 디렉터리에 보관하십시오.

값이 저장되면 숨겨져 접근할 수 없으나 수정은 가능합니다.

오류 페이지 도움말 텍스트

오류 페이지에 인증 혹은 프로비저닝 문제가 발생했을 때 나타나는 텍스트를 입력하십시오.

논스 추적 비활성화

인증 요청을 재사용할 수 있도록 문제 해결을 위해 이 토글을 켜십시오. 보안상의 이유로 이 토글을 끄고 nonx(nonx) 추적을 활성화하는 것이 권장됩니다.

사용자 프로비저닝 활성화

사용자는 MAC 요청에 제공된 정보로 자동 생성될 수 있도록 이 토글을 켜세요.

등록 프로비저닝 활성화

등록이 존재하지 않고 코스ID가 제공될 경우 이 토글을 켜면 자동으로 등록이 생성됩니다.

등록 가능 시간 변경을 허용합니다.

이 토글을 켜면 이미 존재하지만 비활성화된 등록을 활성화할 수 있습니다.

저장을 하려면 저장을 선택하십시오.

어댑터 설정 URL은 https://{region}.extensions.blackboard.com/api/v2/authadapters/sites/{siteId}/auth/{alias}.

신뢰 시스템에서 MAC 생성 중

신뢰할 수 있는 시스템은 사용자를 제대로 인증하기 위해 SSO 요청과 함께 보낼 유효한 MAC(메시지 인증 코드)을 생성할 수 있어야 합니다. 이 MAC은 SSO 요청의 무결성을 판단하는 데 사용됩니다. 보안 MAC을 생성하려면 다음 단계를 따르십시오:

  1. 매개변수(타임스탬프, 사용자 ID, MAC 설정에 사용되는 요청 매개변수에서 정의된 추가 매개변수)를 매개변수 이름에 따라 알파벳 순으로 정렬하십시오.

  2. 매개변수 이름을 정렬하여 매개변수 값을 하나의 문자열로 연결하십시오.

  3. 2단계에서 얻은 문자열에 공유된 비밀을 추가하십시오.

  4. MD5 알고리즘을 사용하여 문자열을 16바이트 문자열로 암호화합니다.

  5. 16바이트 문자열을 32바이트 알파벳숫자(16진수) 문자열로 변환해 URL 친화적으로 만듭니다.

이 예시는 요청 매개변수 문자열의 기본값과 공유 비밀값인 "blackboard"를 사용하며, "courseId"는 Mac에서 사용되는 요청 매개변수에 추가로 정의된 매개변수입니다.

  1. 정렬된 매개변수(괄호 안의 값): courseId(TC-101), 타임스탬프(1268769454017), userId(test01)

  2. 연결 매개변수 값: TC-1011268769454017test01

  3. 공유 비밀 첨부: TC-1011268769454017test01blackboard

  4. 암호화된 문자열: ŒIV ̈Báƒež©dxºvqâ

  5. 변환된 스트링: 8c4956a842e183659ea96478ba7671e2

맥 스크립트 예시

자바 예시

보안 알고리즘:

    /**
     * Calculates a secure MAC (message authentication code) from an array of strings and shared secret.
     * @param values – Parameters must first be sorted alphabetically by parameter name, then the                values of these sorted parameters passed to calculateSecureMac
     * @param secret - the shared secret
     * @return The calculated MAC
     */

    private String calculateSecureMAC (final String[]
      values, final String secret) throws
      NoSuchAlgorithmException
    {

      // concatenate param values
      final int size = values.length;
      String paramString = "";
      for(int i=0; i<size; i++)
      {

        paramString += values[i];
      }

      // get md5 hash from ascii value and secret
      final MessageDigest md = MessageDigest.getInstance("MD5");
      final byte[] hashBytes = md.digest((paramString + secret).getBytes());
      md.reset();

      // convert to hex
      String mac = "";
      String hexByte;
      for (int k=0; k<hashBytes.length; k++)
      {

        hexByte = Integer.toHexString(hashBytes[k] < 0 ? hashBytes[k] + 256 : hashBytes[k]);
        mac += (hexByte.length()==1) ? "0" + hexByte : hexByte;
      }

      return mac;
    }

PHP 예시

보안 알고리즘:

/* Calculates a MAC (message authentication code) from an array of strings and a secret.
   Sort request parameters alphabetically by parameter name first, then pass values of sorted
   parameters and shared secret to calculateSecureMac */

function calculateSecureMac($params, $secret)
{

  // concatenate param values
  $data = implode('', $params);

  // get md5 of concatenated param values and secret
  $mac = md5($data . $secret);
  return $mac;
}

Perl 예시

보안 알고리즘:

use Digest::MD5;

# Calculates a MAC (message authentication code) from an array of strings and a secret. Sort request      parameters alphabetically by parameter name first, then pass values of sorted parameters and shared      secret to calculateSecureMac

sub calculateSecureMac

{
  my @args = @_;
  $secret = pop(@args);

  # concatenate param values
  $data = join("", @args);

  # get md5 of concatenated param values and secret
  $ctx = Digest::MD5->new;
  $ctx->add($data . $secret);
  $mac = $ctx->hexdigest;
  return $mac;
}