Identity Plaatform[GCC]의 사용법(클라우드 런과 함께 사용 가능)

개요


공식 이외의 사용법을 일본어로 설명하는 방법을 찾지 못했기 때문에 여기에 기술합니다.

Identity Plaatform 설명


GCP의 IDaS 서비스입니다.GCP 관련 기본은 Firebase Authrization이라고 생각하지만 이 안에서 움직이는 것은 Identity Platiform입니다.서비스는 별다른 차이가 없지만'다세입자 기능'은 다르다.한마디로 사용자 그룹(≈ 임차인)으로 나눌 수 있다.
기본적인 사용 방법은Firebase Authrization과 같고 각 언어의 라이브러리에서도 같은 것을 사용한다.웹 브라우저에서 사용할 때'identitytooolkit'을 사용하면 기본적으로Firebase와 같은 환경에서 문제가 없습니다.

세인트 프로스니 펫


여기에는 JavaScript가 설명되어 있습니다.여기는javascript 라이브러리의version9입니다.

초기화


기타 config 내용도 있으니 적당히 추가하세요.다음은 최소한의 내용이다.이 근처는 Firebase 라이브러리에 필요한 처리이기 때문에 상세한 설명이 필요 없습니다.
import { initializeApp } from "firebase/app";
const config = {
  apiKey: "~~",
  authDomain: ["localhost", "~~"],
};
initializeApp(config);

로그인


여기에 적힌 것은 함수입니다. 함수의 내용만 참고하십시오. (함수 테스트는 하지 않았습니다.)
import {
  getAuth,
  EmailAuthProvider,
  signInWithCredential,
  setPersistence,
  browserLocalPersistence,
  getIdToken,
} from "firebase/auth";

export async function login(email, password){
  const auth = getAuth();
  auth.tenantId = "~~"; //マルチテナント機能を使用している場合は、テナント毎にこれを変更します。使用していない場合は必要ないです。
  // browserLocalPersistenceを指定していますが、これはsignOut関数を呼び出さない限り、ログイン状態を保持します。
  setPersistence(auth, browserLocalPersistence).then(async () => {
    // 今回はEmail+Passwordでのログイン
    const authCredential = EmailAuthProvider.credential(
      email,
      password
    );
    // 今回はEmail+Passwordでのログイン
    await signInWithCredential(auth, authCredential)
      .then(() => {
        // 正常処理
      })
      .catch(() => {
        // 異常処理
      });
  });
}

Cloud run과의 콜라보레이션.


여기에는 파이톤으로 스니 애완동물을 표시했다.
참고와는 조금 다르지만, 다음은 다세입자 이용 시 이야기다.아래에서 알 수 있듯이 Firebaseadmin을 사용하기 때문에 이 초기화 함수를 따로 호출해야 합니다.
from typing import Any, Callable
from firebase_admin import auth
from functools import wraps
from flask import request, Response

def jwt_authenticated(func: Callable[..., int]) -> Callable[..., int]:
    @wraps(func)
    def decorated_function(*args: Any, **kwargs: Any) -> Any:
        header = request.headers.get("Authorization", None)
        if header:
            token = header.split(" ")[1]
            try:
                decoded_token = auth.verify_id_token(token)
                # decoded_token["firebase"]["tenant"]から「tenantId」を取得できます。
            except Exception as e:
                return Response(status=403, response=f"Error with authentication: {e}")
        else:
            return Response(status=401)

        request.uid = decoded_token["uid"]
        return func(*args, **kwargs)

    return decorated_function

참고 자료

  • 클라우드 런의 터미널 사용자 인증 자습서: https://cloud.google.com/run/docs/tutorials/identity-platform?hl=ja
  • 좋은 웹페이지 즐겨찾기