Azure Fluid Relay 토큰 계약
Azure Fluid Relay로 전송된 요청에는 인증 헤더에 JWT 토큰이 포함되어야 합니다. 이 토큰은 테넌트 키로 서명되어야 합니다.
클레임
JWT(JSON Web Token)는 세 부분으로 나뉩니다.
- 헤더 - 토큰 유형과 서명 방법에 대한 정보를 포함하여 토큰의 유효성을 검사,하는 방법에 대한 정보를 제공합니다.
- 페이로드 - 서비스를 호출하려고 하는 사용자 또는 앱에 대한 모든 중요 데이터가 포함되어 있습니다.
- 서명 - 토큰의 유효성을 검사하는 데 사용되는 원시 자료입니다.
각 부분은 마침표(.)로 구분되며 별도로 Base64로 인코딩됩니다.
헤더 클레임
클레임 | 서식 | 설명 |
---|---|---|
alg | string | 토큰 서명에 사용되는 알고리즘입니다. 예: "HS256" |
typ | string | 이 값은 항상 "JWT"여야 합니다. |
페이로드 클레임
클레임 | 서식 | 설명 |
---|---|---|
documentId | string | AFR(Azure Fluid Relay) 서비스에서 생성됩니다. 토큰이 생성되는 문서를 식별합니다. |
scope | string[] | 문서 또는 요약에서 클라이언트가 요구하는 권한을 식별합니다. 모든 범위에 대해 클라이언트에 부여할 권한을 정의할 수 있습니다. |
tenantId | string | 테넌트를 식별합니다. |
user | JSON | 애플리케이션의 사용자를 식별합니다. 애플리케이션에서 Fluid Framework 대상 그룹을 사용하여 사용자를 식별하는 데 사용할 수 있습니다.{ id: <user_id>, name: <user_name>, additionalDetails: { email: <email>, date: <date>, }, } |
iat | 숫자, UNIX 타임스탬프 | "발급 시"는 이 토큰에 대한 인증이 발생한 시기를 나타냅니다. |
exp | 숫자, UNIX 타임스탬프 | "exp"(만료 시간) 클레임은 JWT가 그 이후에는 처리를 허용하지 않아야 하는 만료 시간을 식별합니다. 토큰 수명은 1시간을 초과할 수 없습니다. |
ver | string | 액세스 토큰의 버전을 나타냅니다. 1.0 이어야 합니다. |
jti | string | 선택 사항. "jti"(JWT ID) 클레임은 JWT에 대한 고유 식별자를 제공합니다. 식별자 값은 동일한 값이 실수로 다른 데이터 개체에 할당될 가능성을 무시할 수 있도록 하는 방식으로 할당해야 됩니다. 문서 만들기에 동일한 토큰 사용으로 인한 실패를 방지하려면 이 클레임을 사용하는 것이 좋습니다. |
샘플 Azure Fluid Relay 토큰
{
"alg": "HS256",
"typ": "JWT"
}.{
"documentId": "746c4a6f-f778-4970-83cd-9e21bf88326c",
"scopes": [ "doc:read", "doc:write", "summary:write" ],
"iat": 1599098963,
"exp": 1599098963,
"tenantId": "AzureFluidTenantId",
"ver": "1.0",
"jti": "d7cd6602-2179-11ec-9621-0242ac130002"
}.[Signature]
Azure Fluid Relay 토큰을 어떻게 생성할 수 있나요?
jsonwebtoken npm 패키지를 사용하고 이 방법을 사용하여 토큰에 서명할 수 있습니다.
export function getSignedToken(
tenantId: string,
documentId: string,
tokenLifetime: number = 60 * 60,
ver: string = "1.0") {
jwt.sign(
{
documentId,
user: {
displayName: "displayName",
id: "userId",
name: "userName"
},
scopes: ["doc:read", "doc:write", "summary:write"],
iat: Math.round((new Date()).getTime() / 1000),
exp: Math.round((new Date()).getTime() / 1000) + tokenLifetime, //set the expiry date based on your needs but max-limit is one hour.
tenantId,
ver,
jti: uuid(),
},
"<tenant_key>");
}