as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
AWS
文档
Support
Contact Us
My Cases
新手入门
设计和开发
应用发布
参考
支持

@amazon-devices/keplerscript-identity-lwa-lib

@amazon-devices/keplerscript-identity-lwa-lib

Kepler Login with Amazon (LWA) API提供了功能,让您可以利用Amazon.com使用的用户身份验证系统来保护您客户的信息。在将LWA添加到Kepler应用之前,必须为应用注册LWA。

要详细了解什么是LWA及其工作原理,请参阅Login with Amazon文档

先决条件

以下列表显示了在将LWA添加到Kepler应用之前所需的事项。

获取API密钥

要在您的应用中使用LWA,您需要提供应用的API密钥。API密钥是一个标识符,亚马逊授权管理器使用它向LWA授权服务识别您的应用。调试应用和生产应用需要不同的API密钥。您可以使用应用程序包ID以及应用MD5SHA256签名生成API密钥。虽然应用的调试版本和生产版本的程序包ID相同,但您使用不同的过程来检索MD5SHA256签名。要检索调试应用的签名,请参阅调试应用的MD5和SHA256签名。对于生产应用,请参阅生产应用的MD5和SHA256签名

按照以下步骤创建API密钥并将其添加到您的LWA账户:

  1. 打开亚马逊应用商店开发者控制台并登录您的账户。
  2. 创建或打开现有的安全配置文件。有关更多信息,请参阅LWA文档
  3. 为您的Kepler应用添加API密钥。
    1. 选择Android/Kindle设置
    2. 转到添加API密钥。输入以下信息:

      • API密钥名称 - 创建一个名称以标识您的应用。
      • 程序包 - 输入程序包ID,例如com.mycompany.myapp
      • MD5签名 - 输入MD5签名。
      • SHA256签名 - 输入SHA256签名。

调试应用的MD5和SHA256签名

  1. 将Fire TV Stick连接到您的开发计算机。
    1. 打开终端shell并运行vda devices命令。
    2. 确认输出中列出了设备序列号。

      已复制到剪贴板。

      .

       vda devices
       连接设备的列表
       G4N33M33333333TA    device
      
  2. 在终端中,运行vpm info <程序包名称>。替换 <程序包名称> 为您的应用的程序包名称。您可以在manifest.toml文件中找到程序包的名称。

    已复制到剪贴板。

     [package]
     id = "com.amazon.identity.lwa.authorizationmanager.service" ==> package_name
    
  3. 找到签名信息。
    1. 在命令输出中,找到“Signers info”(签名者信息)部分。

    2. 挑选任意一位签名者,把其MD5和SHA256签名都记录下来。对于SHA256签名,输出中会有两行内容。用:连接这两行。例如,如果输出中显示的SHA256是以下内容:

      已复制到剪贴板。

       17:6c:1b:d5:24:d6:0d:6c:e7:88:fd:9c:61:09:c2:01
       b2:21:2a:79:66:10:c8:a7:74:64:11:d0:13:39:31
      

      SHA256的正确字符串是

      17:6c:1b:d5:24:d6:0d:6c:e7:88:fd:9c:61:09:c2:01:b2:21:2a:79:66:10:c8:a7:74:64:11:d0:13:39:31

生产应用的MD5和SHA256签名

对于应用的发布或“生产”版本,您必须使用应用商店的MD5和SHA256签名创建额外的API密钥,并将其存储在应用的manifest.toml文件中。对于使用应用内购买 (IAP) 或动态应用测试 (LAT) 的应用,这也是必需的。

可以在开发者控制台中查找亚马逊应用商店证书哈希值,为现有应用创建API密钥。转到我的应用 > 选择应用的当前版本 > 上传您的应用文件> 亚马逊应用商店证书哈希值

从API密钥中提取clientID

API密钥是一个JWT(JSON网络令牌)。您可以解码这个密钥以找到您的clientID,它将用于后端服务。

使用任何JWT解码工具来解码API密钥。

设置

  1. 将以下库依赖项添加到package.json文件的dependencies部分。

    已复制到剪贴板。

     "dependencies": {
       "@amazon-devices/keplerscript-identity-lwa-lib": "~0.0"
     }
    
  2. 在您的manifest.toml中,添加以下权限并将api_key替换为您之前获得的API密钥

    已复制到剪贴板。

     [wants]
     [[wants.service]]
     id = "com.amazon.identity.lwa.authorizationmanager.service"
    
     [[extras]]
     key = "api_key"
     value = "xyz"
    

使用IAP或LAT的应用对API密钥有单独的要求。有关详细信息,请参阅上面的生产应用部分。

用法

示例: 给用户授权

以下代码示例演示如何将Authorize调用集成到您的React Native组件中,以启动用户授权流程并获取访问令牌和用户详细信息。

已复制到剪贴板。

import {
  AuthorizationManager,
  AuthorizeCallbacks,
  AuthorizeCancellationReason,
  AuthorizeSuccessParams,
  GrantTypeName,
  ScopeName
} from '@amazon-devices/keplerscript-identity-lwa-lib';

/**
 * 定义回调函数来处理授权流程的结果。
 */
const authorizeCallbacks: AuthorizeCallbacks = {
  // 授权成功时调用
  authorizeSuccess: (authParams) => {
    console.log('授权成功:', authParams);
    // 处理成功的响应:
  },

  // 由于错误导致授权失败时调用
  authorizeFailure: (error) => {
    console.error('授权失败:', error);
    // 处理失败场景:
  },

  // 当用户或系统取消授权时调用
  authorizeCancel: (cancelReason) => {
    console.log('授权已取消:', cancelReason);
    // 处理取消:
  }
};

// 步骤1: 定义您的授权请求参数。
const authorizeRequest: AuthorizeRequest = {
  scopes: [
    { name: ScopeName.PROFILE },         // 请求用户的个人资料信息
    { name: ScopeName.POSTAL_CODE }      // 请求用户的邮政编码。
  ],

  // 可选: 仅在使用PKCE执行授权码流程时使用
  // PKCE(代码交换证明密钥)提高了公共客户端的安全性。
  // 例如,“AUTH_CODE”或“ACCESS_TOKEN”
  // 如果未提供,则默认为“ACCESS_TOKEN”。
  grantType: GrantTypeName.ACCESS_TOKEN,
  codeChallenge: 'your-code-challenge',           // <-- 替换为实际的PKCE代码挑战
  codeChallengeMethod: 'your-code-challenge-method' // 例如,适用于SHA-256的S256,或者普通。
};

// 步骤2: 触发授权请求
AuthorizationManager.authorize(
  authorizeRequest,
  authorizeCallbacks
);

示例: 获取授权令牌

以下代码示例演示如何将GetToken调用集成到您的React Native组件中,以检索指定范围的授权令牌。

已复制到剪贴板。

import {
  AuthorizationManager,
  GetTokenCallbacks,
} from '@amazon-devices/keplerscript-identity-lwa-lib';

// 定义回调函数来处理getToken操作的结果。
const getTokenCallbacks: GetTokenCallbacks = {
  // 成功检索到令牌后,将调用此函数。
  getTokenSuccess: function (access_token: any): void {
    console.log('getTokenSuccess', JSON.stringify(access_token));
    // 在此处放置任何逻辑以使用接收到的令牌,例如对API请求进行身份验证或进行安全存储。
  },
  // 如果令牌检索流程出现错误,则调用此函数。
  getTokenFailure: function (category: any): void {
    console.log('getTokenFailure', JSON.stringify(category));
    // 在此处添加逻辑以处理令牌检索失败,例如显示错误消息或重试操作。
  },
};

// 要开始令牌检索流程,请从AuthorizationManager调用getToken方法。
// 此方法采用上面定义的回调函数来管理成功和失败的结果。
AuthorizationManager.getToken(getTokenCallbacks);

示例: 获取用户详细信息

以下代码示例演示了如何将GetUser调用集成到您的React Native组件中,以获取和显示用户配置文件信息。

已复制到剪贴板。

import {
  AuthorizationManager,
  GetUserCallbacks,
} from '@amazon-devices/keplerscript-identity-lwa-lib';

// 定义回调函数来处理getUser操作的结果。
const getUserCallbacks: GetUserCallbacks = {
  // 成功检索到用户信息后,将执行此函数。
  getUserSuccess: (userInfo) => {
    console.log('检索到用户信息:', userInfo);
    // 添加任何其他逻辑来处理用户信息,例如在用户界面上显示用户信息或存储用户信息以用于会话管理。
  },
  // 如果检索用户信息时出错,则调用此函数。
  getUserFailure: (error) => {
    console.error('检索用户信息失败:', error);
    // 通过显示错误消息或采取适当的纠正措施来处理用户检索失败。
  },
};

// 从AuthorizationManager调用getUser方法来触发用户配置文件检索流程。
// 此方法采用上面定义的回调函数来处理成功和失败的结果。
AuthorizationManager.getUser(getUserCallbacks);

示例: 让用户退出登录

以下代码示例演示了如何将Signout调用集成到您的React Native组件中,让用户可以安全地退出登录。

已复制到剪贴板。

import {
  AuthorizationManager,
  SignOutCallbacks,
} from '@amazon-devices/keplerscript-identity-lwa-lib';

// 定义回调函数来处理注销流程的结果。
// 这些函数将在注销操作完成后调用。
const signOutCallbacks: SignOutCallbacks = {
  // 如果注销成功,则执行此函数。
  signOutSuccess: () => {
    console.log('成功退出登录');
    // 处理注销后操作的其他逻辑可以放置在此处,例如重定向用户或清除会话数据。
  },
  // 如果注销失败,则执行此函数。
  signOutFailure: (error) => {
    console.error('退出登录失败:', error);
    // 在此处包含错误处理逻辑,例如向用户显示错误消息或重试操作。
  },
};

// 要触发注销流程,请从AuthorizationManager调用signOut方法。
// 此方法会采用上面定义的回调函数。
AuthorizationManager.signOut(signOutCallbacks);

模块


Last updated: 2025年10月3日