使用 Claris ID 进行外部验证

要将 FileMaker Data API、FileMaker Admin API 或 OData API 与 FileMaker Cloud 一起使用,必须使用 Claris ID 帐户(非外部 IdP 帐户)验证身份。FileMaker Cloud 使用 Amazon Cognito 进行外部验证。

Amazon Cognito 通过用户池管理用户,用户池提供登录、基于身份提供商系统的验证、用户目录和配置文件管理以及安全监控等服务。(请参阅 Amazon Cognito 用户池。)

要使用 Claris ID 进行验证:

  1. 检索 UserPoolId 和 ClientId 参数的值。

    Amazon Cognito 需要通过 UserPoolId 和 ClientId 来对用户进行验证。FileMaker Cloud 提供以下端点:

    https://www.ifmcloud.com/endpoint/userpool/2.2.0.my.claris.com.json

    该端点返回以下结果:

    {
        "errcode":"Ok",
        "errmessage":null,
        "data":{
            "Region": "us-west-2",
            "UserPool_ID":"us-west-2_NqkuZcXQY",
            "Client_ID":"4l9rvl4mv5es1eep1qe97cautn",
            "API_Host": "api-cp-global.ifmcloud.com/2-2",
            "FCC_Host": "console.claris.com"
        },
        "csrid":null
    }

    注释  返回的 Region 和 API_Host 值不用于验证。

  2. 使用 JavaScript 的 Amazon Cognito Identity SDK 通过 Amazon Cognito 验证用户身份。(请参阅 Amazon Cognito Identity SDK for JavaScript。) 使用以下 JavaScript 代码示例检索 Claris ID 令牌 (Claris_ID_token) 和 Claris ID 刷新令牌 (Claris_ID_refresh_token) 的值。

    Claris ID 令牌在您使用 FileMaker Data API、FileMaker Admin API 或 OData API 时用于身份验证,有效期为一小时。Claris ID 刷新令牌可允许脚本在 Claris ID 令牌到期后继续运行,其有效期为一年。

注释 

  • 要在 FileMaker Cloud 中执行 FileMaker API 调用,您必须先验证 Claris ID 帐户,并获取必要的会话令牌。令牌的有效期为一小时。如果距上次 Claris ID 验证超过了一小时,API 调用将会失败,并显示 401 错误。要解决此问题,请使用 Claris ID 帐户再次验证,并获取新的会话令牌。

示例

在本例中:

  • 使用了上文中的 UserPool_IDClient_ID

  • 对于用户名密码,请输入 Claris ID 用户名和密码

  • 四个以 mfaRequired 开头的行仅在为 Claris ID 启用了多重身份验证 (MFA) 时才需要

  • 代码提取自 Amazon 提供的示例(请参阅使用 JavaScript 的 Amazon Cognito Identity SDK 访问身份池。)

示例代码:

var authenticationData = {
    Username : 'username',
    Password : 'password',
};
var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
var poolData = {
    UserPoolId : 'us-west-2_NqkuZcXQY',
    ClientId :'4l9rvl4mv5es1eep1qe97cautn'
};
var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
var userData = {
    Username : 'username',
    Pool : userPool
};
var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
    onSuccess: function (result) {
        var Cognito_access_token = result.getAccessToken().getJwtToken();
        var Claris_ID_token = result.idToken.jwtToken;
        var Claris_ID_refresh_token = result.refreshToken.token;
    },
    onFailure: function(err) {
        alert(err);
    },
    mfaRequired: function(codeDeliveryDetails) {
        var verificationCode = prompt('请输入验证码' ,'');
        cognitoUser.sendMFACode(verificationCode, this);
    }
});