You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cognito访问令牌对接Verified Permissions的技术问询

AWS Verified Permissions 规范Schema创建与授权请求构造

一、创建符合要求的Schema

Verified Permissions 使用 Cedar 语言定义实体Schema,需要匹配你的业务实体(用户、资源、动作)结构,同时对齐Cognito令牌携带的属性。

核心定义要点

  • 主体(Principal):对应Cognito用户,需映射令牌内的标准/自定义Claim(如sub、email、groups)
  • 资源(Resource):定义业务资源类型(如示例中的Module)
  • 动作(Action):声明可对资源执行的操作(如read、write),并绑定可作用的资源类型

示例Cedar Schema

// 定义Cognito用户主体类型
entity type User extends Principal {
    attributes: {
        sub: String,       // 对应Cognito令牌的sub Claim
        email: String,     // 对应Cognito令牌的email Claim
        groups: Set<String> // 对应Cognito用户组的自定义Claim
    }
}

// 定义业务资源类型:模块
entity type Module extends Resource {
    attributes: {
        moduleId: String   // 资源唯一标识属性
    }
}

// 定义动作类型,指定可作用的资源范围
action type Action {
    applies to: [Module]
}

// 声明具体动作实例
action read: Action;
action write: Action;

注意事项

  • Schema内的entityType、actionType必须和后续授权请求中的参数严格一致
  • 确保Schema属性名与Cognito令牌内的Claim名称完全匹配,Verified Permissions会自动映射令牌属性到实体

二、构造合法的isAuthorizedWithToken请求参数

你的现有代码存在几个关键缺失项,以下是修正后的完整示例:

修正后代码

import { VerifiedPermissions } from "@aws-sdk/client-verifiedpermissions";

const authorizeWithToken = async () => {
  const accessToken = "你的Cognito Access Token";
  const idToken = "你的Cognito ID Token"; // 可选,如需用到ID Token内的属性则传入

  try {
    // 初始化Verified Permissions客户端,指定AWS区域
    const client = new VerifiedPermissions({ region: "us-east-1" });

    const params = {
      // 必传:策略存储ID,在AWS控制台创建策略存储时生成
      policyStoreId: "ps-xxxxxxxxxxxxxx",
      // 传入Cognito Access Token作为主体凭证
      accessToken: accessToken,
      // 可选:传入ID Token以获取更多用户属性
      // identityToken: idToken,
      // 动作定义:需与Schema内的动作一致
      action: {
        actionId: "read",
        actionType: "Action"
      },
      // 资源定义:需与Schema内的资源类型一致
      resource: {
        entityId: "mis",
        entityType: "Module"
      },
      // 可选:传递额外上下文信息(如IP、时间)
      // context: {
      //   contextMap: {
      //     ipAddress: "192.168.1.1"
      //   }
      // }
    };

    const result = await client.isAuthorizedWithToken(params);
    // 决策结果:allowed为true则授权通过,false则拒绝
    console.log("授权决策:", result.decision);
    return result;
  } catch (error) {
    console.error("授权请求失败:", error);
    throw error;
  }
};

关键参数说明

  • policyStoreId:必传项,是Verified Permissions策略存储的唯一标识,无此参数请求会直接失败
  • accessToken/identityToken:二选一或同时传入,Verified Permissions会自动验证令牌有效性并解析属性作为主体信息
  • action:actionId需与Schema内声明的动作(如read)一致,actionType必须匹配Schema内的动作类型(如Action)
  • resource:entityId为资源唯一标识,entityType必须匹配Schema内的资源类型(如Module)

三、额外注意事项

  1. 确保Cognito令牌未过期且签名有效,Verified Permissions会自动完成令牌验证
  2. 需在策略存储中创建Cedar授权策略(如允许某用户组读取指定模块),否则默认会拒绝所有请求
  3. 若需基于自定义Claim做授权逻辑,需提前在Schema中定义对应属性

内容的提问来源于stack exchange,提问作者Shafeeque Ali P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:27:52