FileMaker Cloud에서 데이터 API를 사용하려면

개시하다


FileMaker Server에는 HTTP를 통해 FileMaker의 데이터에 액세스할 수 있는 데이터 API 기능이 있습니다.외부 시스템과의 협력을 편리하게 하기 때문에 우리 회사도 충분히 이용하였다.
당사의 FileMaker 서버는 회사 내부의 Macmini에서 실행되는 이른바 시작 설정입니다.이 외에도 FileMaker Cloud 라이센스가 있지만 현재 사용할 방법이 없고 사용하지 않습니다.너무 아쉬워서 데이터 API용 서버로 사용할 수 없게 됐고, FileMaker Cloud에서는 데이터 API를 활용하는 방법을 조사했다.
FileMaker Cloud에서 데이터 API를 사용하는 방법은 단편적인 정보뿐입니다.에피소드를 이어받아 겨우 연결이 됐지만, 상당히 힘들어 모든 정보를 모은 기사를 써서 공개하기로 했다.

이 기사에 쓰인 일

  • FileMaker Cloud의 ID와 비밀번호를 사용하여 ID 영패와 갱신 영패(Refresh 영패)를 얻는 방법
  • 2단계 인증이 설정된 상태에서 ID 토큰을 획득하는 방법
  • ID 토큰을 사용하여 데이터 API에 액세스하는 방법
  • 업데이트 토큰을 사용하여 ID 토큰을 다시 가져오는 방법
  • 이 기사에는 쓰이지 않은 일이 있다

  • FileMaker 데이터 API의 기본 사용 방법
  • 환경 구축 방법
  • 구상적 독자

  • 개봉판 데이터 API를 사용한 사람
  • FileMaker Cloud 버전에서 데이터 API 사용을 논의한 사람
  • ID 토큰 및 업데이트 토큰 가져오기


    우선 개봉판 Data API를 복습해 보겠습니다.릴리즈 Data API에서는 ID와 비밀번호를 콜론으로 연결하고 Base64로 변환하는 문자열을 사용하여 인증합니다.예를 들어 IDhoge, 비밀번호fugaaG9nZTpmdWdh는 인증키다.이것은 다음 명령을 통해 얻을 수 있습니다.
    echo -n "hoge:fuga" | base64
    
    다음curl 명령을 실행하면 데이터 API에 접근하는 영패를 얻을 수 있습니다.
    curl -X POST -H 'Content-Type: application/json' -H 'Authorization: Basic aG9nZTpmdWdh' -d '{}' https://{ホストURL}/fmi/data/v2/databases/{データベース名}/sessions
    
    다른 한편, FileMaker Cloud에서 상술한 방법은 통용되지 않는다.FileMaker Cloud는 아마존 코그니토를 인증에 사용하기 때문에 먼저 코그니토 인증을 통해 ID 영패를 받아야 한다.[1]
    공식 홈페이지에 게재된 코드의 예가 매우 불친절하기 때문에 다음은 더욱 간단하고 알기 쉬운 프로그램을 소개한다.

    Node.js의 준비


    아마존 코그니토는 WEB와 모바일 애플리케이션을 주요 목표로 하기 때문에 많은 샘플 코드를 자바스크립트로 썼고, 이 글도 자바스크립트를 사용했다.브라우저에서 이동할 수 있지만 기호화폐를 얻기 위해 일부러 WEB 앱을 만드는 것도 번거롭기 때문에 이번에는 노드다.js를 사용합니다.Node.js의 설치 방법을 생략합니다.
    Cognito에 액세스하려면 SDK가 필요합니다. 작업용 폴더에서 다음 명령을 실행하십시오.
    npm install --save amazon-cognito-identity-js
    

    프로그램 준비


    Start Edition은 명령줄에 의해 처리되며 FileMaker Cloud가 같은 일을 하려면 다음과 같은 긴 프로그램을 준비해야 합니다.[2] [3]
    auth.js
    const awsCognito = require("amazon-cognito-identity-js");
    
    // IDとパスワード
    const ID = "hoge";
    const PW = "fuga";
    
    // ユーザープール設定
    const userPool = new awsCognito.CognitoUserPool({
      UserPoolId: "us-west-2_NqkuZcXQY",
      ClientId: "4l9rvl4mv5es1eep1qe97cautn",
    });
    
    // ユーザー決定
    const cognitoUser = new awsCognito.CognitoUser({
      Username: ID,
      Pool: userPool,
    });
    
    // パスワードの設定
    const authenticationDetails = new awsCognito.AuthenticationDetails({
      Password: PW,
    });
    
    // ユーザープール/ユーザー/パスワードを使って認証
    cognitoUser.authenticateUser(authenticationDetails, {
      // 成功時
      onSuccess(result) {
        // 認証完了トークンを取得。以降はこのトークンで認証済み確認
        console.log(
          "Cognito Access Token : " + result.getAccessToken().getJwtToken()
        );
        console.log("\nClaris ID Token : " + result.idToken.jwtToken);
        console.log("\nClaris ID Refresh Token : " + result.refreshToken.token);
      },
      onFailure(err) {
        console.error(err);
      },
      // 二段階認証
      async mfaRequired(codeDeliveryDetails) {
        const verificationCode = await readUserInput(
          "Please input verification code : "
        );
        console.log("verification code = " + verificationCode);
        await cognitoUser.sendMFACode(verificationCode, this);
      },
    });
    
    // ユーザからのキーボード入力を取得する Promise を生成する
    function readUserInput(question) {
      const readline = require("readline").createInterface({
        input: process.stdin,
        output: process.stdout,
      });
    
      return new Promise((resolve, reject) => {
        readline.question(question, (answer) => {
          resolve(answer);
          readline.close();
        });
      });
    }
    
    이 소스 코드를 복사하고 ID와 비밀번호를 다시 씁니다.auth.js라는 이름으로 저장하세요.사용자 수영장 설정은 Claris ID용 설정이므로 다시 쓸 필요가 없습니다.
    저장한 후 다음 명령을 실행합니다.
    node auth.js
    
    2단계 인증이 설정되지 않은 경우 ID와 비밀번호가 정확하면 코그니토 인증을 통해 코그니토의 방문 영패와 클라리스 ID 영패, 업데이트 영패를 표시합니다.

    2단계 인증 지원


    그럼 2단계 인증을 설정한 경우에는 어떻게 되나요?
    이번 조사여기 기사.에서 다음과 같은 기술을 보았다.[4]
    FileMaker Cloud를 이용할 때 Claris ID가 2단계 인증(2단계 검증)으로 설정되어 있기 때문에 Cognito에서 Claris ID를 사용하여 접근하더라도 SMS에서 인증을 시작합니다.
    그러나 SMS에서 인증 코드를 보냈더라도 해당 인증을 입력한 화면이 없어 당연히 인증을 지울 수 없다.
    Claris에 대한 지원을 요청하면 두 단계의 인증만 해제할 수 있습니다.네.
    하지만 이는 Claris의 지원 오류이며 실제로 두 단계의 인증이 여전히 유효해도 상관없습니다.
    위의 절차는 2단계 인증을 지원합니다.2단계 인증을 설정한 경우 ID와 암호를 확인한 후 인증 코드를 입력할 때까지 기다립니다.SMS에서 보낸 인증 코드를 입력하면 다양한 토큰이 표시됩니다.

    ID 토큰을 사용하여 데이터 API 액세스


    이렇게 해야만 ID 영패를 얻을 수 있다.다음은 액세스 데이터 API의 토큰입니다.이거 HTTP만 가능해요.[5] [6]
    다만
    curl -X POST -H 'Content-Type: application/json' -H 'Authorization: FMID {IDトークンの値}' -d '{}' https://{ホストURL}/fmi/data/v2/databases/{データベース名}/sessions
    
    Authorization의 곳은 FMID로 바뀌었고, 그 외에는 개봉판과 같다.이후 처리는 시사회 데이터 API와 동일하므로 생략합니다.

    업데이트 토큰을 사용하여 ID 토큰을 다시 가져오기


    ID 토큰은 1시간 후 무효입니다.물론 재인증하면 아이디 영패를 다시 받을 수 있지만 매번 2급 인증을 하는 것은 번거롭다.그러나 두 단계의 인증이 무효화되는 것은 매우 위험하다.
    업데이트 토큰을 사용하면 ID 토큰을 2단계 인증과 동시에 자동으로 재발급할 수 있습니다.
    업데이트 토큰을 사용하여 ID 토큰을 재발매하는 프로그램이 여기 있습니다.공식 서류에 기재되어 있지 않기 때문에 나는 열심히 조사해 보았다.
    refresh.js
    const awsCognito = require("amazon-cognito-identity-js");
    
    // IDと更新トークン(Refresh Token)
    const ID = "hoge";
    const REFRESH_TOKEN = "xxxxxxxxxxxxxxxxxxx";
    
    // ユーザープール設定
    const userPool = new awsCognito.CognitoUserPool({
      UserPoolId: "us-west-2_NqkuZcXQY",
      ClientId: "4l9rvl4mv5es1eep1qe97cautn",
    });
    
    // ユーザー決定
    const cognitoUser = new awsCognito.CognitoUser({
      Username: ID,
      Pool: userPool,
    });
    
    // Refresh Tokenの設定
    const cognitoRefreshToken = new awsCognito.CognitoRefreshToken({
      RefreshToken: REFRESH_TOKEN,
    });
    
    // ユーザープール/ユーザー/更新トークンを使ってIDトークンを再取得
    cognitoUser.refreshSession(cognitoRefreshToken, (err, result) => {
      if (err) throw err;
      // 成功時
      // 認証完了トークンを取得。以降はこのトークンで認証済み確認
      console.log(
        "Cognito Access Token : " + result.getAccessToken().getJwtToken()
      );
      console.log("\nClaris ID Token : " + result.idToken.jwtToken);
      console.log("\nClaris ID Refresh Token : " + result.refreshToken.token);
    });
    
    소스 코드, ID 및 REFRESH 복사TOKYO, refresh를 덮어씁니다.js라는 이름으로 저장하세요.
    node refresh.js
    
    실행 후 각종 영패가 auth.js와 같지만 2단계 인증의 인증 코드를 입력할 필요가 없습니다.
    영패 갱신(영패 갱신)은 1년 내에 유효합니다.기한이 지난 후auth.js를 실행하여 새로운 업데이트 영패를 가져옵니다.

    총결산


    FileMaker Cloud에는 데이터 API를 사용하는 일련의 단계가 설명되어 있습니다.영패를 얻기 위해서는 많은 프로그램을 써야 하기 때문에 저코드 개발을 제창하는 FileMaker와는 인연이 맞지 않는다.공식 문서의 소스 코드를 이해할 수 있는 사람이라면 FileMaker를 사용하지 않을 것이다.
    클라리스 측에서 간단하게 토큰을 발행할 수 있는 UI를 준비해야 하는데 공식 문서의 빈약함만 보면 가망이 없다.이런 QA.도 Claris로서 Data API를 사용하지 않고 구독하는 Claris Connect를 활용하도록 유도하고자 한다는 것을 보여줬다.
    각주
    【공식 문서】외부 인증에 Claris ID 사용↩︎
    가장 빠른 시일 내에 코니토가 사용자 수영장에서 인증할 때까지 ↩︎
    키보드 입력 가져오기(reaqline.question) ↩︎
    REST API로 FileMaker Cloud에 액세스하고 싶습니다! ↩︎
    【공식 문서】Claris FileMaker 19 데이터 API 가이드↩︎
    【공식 문서】FileMaker Admin API 및 데이터 API에 액세스할 수 있는 Claris ID 인증↩︎

    좋은 웹페이지 즐겨찾기