Devise에서 Google Identity Platform 사용자로 이동

저는 리너 테크놀로지의 사아스 제품 매니저입니다. 어렸을 때 ()
당사의 서비스는 Rails를 통해 운영되고 있으며 현재의 Devise gem을 사용하고 있지만 새로운 서비스가 시작되면서 IDaS or 자체의 인증 기반으로의 이전을 논의하고 있습니다.
이번에는 Google Identity Platform(이하 GIP라고 함)을 대상으로 암호를 직접 변환한 레코드로 해싱해 봅니다.사용자의 명문 비밀번호를 모르는 상황에서 귀찮게 하지 않고 옮길 수 있는지 검증하고 싶다는 것이다.
먼저 결론을 말하면 옮길 수 있다.

방침.


다음 문서가 기초로 검증되었습니다.
https://cloud.google.com/identity-platform/docs/migrating-users
getAuth()
  .importUsers(
    [
      {
        uid: 'some-uid',
        email: '[email protected]',
        // Must be provided in a byte buffer.
        passwordHash: Buffer.from('password-hash'),
        // Must be provided in a byte buffer.
        passwordSalt: Buffer.from('salt'),
      },
    ],
    {
      hash: {
        algorithm: 'HMAC_SHA256',
        // Must be provided in a byte buffer.
        key: Buffer.from('secret'),
      },
    }
  )
이 근처의 코드를 본 것 같아서 가져올 때 알고리즘을 지정할 수 있을 것 같다.
Ruby 샘플 코드가 없으며 원래 SDK는 지원 대상에 없습니다.Rubby에서 GIP에 접근할 때google-apis-identitytoolkit_v3 사용하는 방법이 있지만 알고리즘을 지정할 수 없을 것 같습니다.
https://googleapis.dev/ruby/google-api-client/latest/Google/Apis/IdentitytoolkitV3/SignupNewUserRequest.html
따라서 문서의 마지막 Firebase CLI+CSV를 통해 대량 가져오기를 시도합니다.

Bcrypt


Devise는 Bcrype을 사용합니다.
Bcrypt는 Salt 등이 포함된 암호 해시 구성입니다.변환할 때도 알고리즘 지정과 암호 산열을 입력하면 된다.

인용

준비1: 임차인 만들기


GIP를 만든 임차인은 Email/Password의 로그인을 유효하게 합니다.또 테스트용 사용자를 미리 제작한다.임대인의 창설에는 Google Cloud의 유료 설정이 필요합니다.

준비2: 테스트용 어플리케이션 만들기


로그인을 확인하기 위해 테스트용 프로그램을 준비했습니다.
다음 문서는 참조할 수 있습니다.
https://en.wikipedia.org/wiki/Bcrypt
아래 index와 같이 상술한 문서를 따라 진행하십시오.완성
<html>
<body>
<div>Identity Platform Quickstart</div>
<div id="message">Loading...</div>
<script src="https://www.gstatic.com/firebasejs/8.0/firebase.js"></script>
<script>
var config = {
  apiKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
  authDomain: "XXXXXXXXXX.firebaseapp.com",
};
firebase.initializeApp(config);
</script>
<script>
var email = "[email protected]";
var password = "mypassword";

firebase.auth().onAuthStateChanged(function (user) {
  if (user) {
    document.getElementById("message").innerHTML = "Welcome, " + user.email;
  } else {
    document.getElementById("message").innerHTML = "No user signed in.";
  }
});

firebase.auth().signInWithEmailAndPassword(email, password).catch(function (error) {
  document.getElementById("message").innerHTML = error.message;
});
</script>
</body>
</html>
appiKey,authDomain은 준비 1에서 만든 세입자의 설정을 반영했다.이메일,password 로그인을 시도하고 싶은 테스트 사용자의 물건을 잠시 설정하세요.
인증에 성공하면 브라우저에서 다음 보기를 볼 수 있습니다.

3: Firebase CLI 설치 준비


Firebase CLI를 사용하여 가져오기를 수행하므로 미리 설치합니다.
저는 버전 매니저로서 asdfhttps://cloud.google.com/identity-platform/docs/sign-in-user-email를 이용해서 설치했습니다. 하지만 수단은 뭐든지 가능하죠.
설치 후 로그인이 완료되면 기존 사용자를 내보낼 수 있는지 확인하십시오.
$ firebase login
$ firebase auth:export users.csv --project=your-project-name
출력된 CSV를 확인한 후 출력용 샘플로 제작한 사용자.잘 풀리는 것 같은데.

가져오기


가져오기 CSV 형식은 다음 페이지에 표시됩니다.
asdf-firebase
이번에는 4열만 기입했다.

암호 해설은 Devise 암호 해설(encrypted password 필드)의 값을 직접 입력하는 것이 아니라 base64 인코딩이 필요합니다.
CSV가 준비되었으니 제가 한번 해 보겠습니다.
$ firebase auth:import users.csv --hash-algo=BCRYPT --project=your-project-name

Processing users.csv (132 bytes)
Starting importing 1 account(s).
✔  Imported successfully.
획득 완료.
테스트용 앱으로 로그인하려고 했을 때 문제 없이 로그인했어요.

기타 IDaS 대응 상황


그나저나 옥스0도 똑같이 옮길 수 있다.
https://firebase.google.com/docs/cli/auth#file_format
Cognito는 수입 CSV만 보면 지원되지 않습니다.(잘못하면 미안해.)
https://auth0.com/docs/manage-users/user-migration/bulk-user-import-database-schema-and-examples

총결산


Devise의 암호 해싱을 Google Identity Platform으로 가져와 로그인할 수 있는지 확인했습니다.
기판을 옮길 때 비밀번호를 다시 설정하도록 강요하는 체험이 좋지 않아 고려해야 할 일도 늘었다.IDaS를 사용하면 이 일대의 편리한 기능을 활용할 수 있다.
그럼

선전하다.


SaaS의 인증 기반과 권한 관리에 대해 한담하고 싶은 분이 있다면 꼭!
https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/cognito-user-pools-using-import-tool-csv-header.html
https://meety.net/matches/ikGnjVjVnQtb

좋은 웹페이지 즐겨찾기