0

我正在使用 NodeJs SDK 使用 Appid 实现,我目前正在尝试ApplicationIdentityToken通过TokenManager. 下面是我的代码片段。

给你一个有效的tokenManager.getApplicationIdentityToken()令牌,但我面临的问题是,每当我将此令牌传递给userProfileManager.getUserInfo(token)它时,它都会给我一个UnauthorizedException.

我已经剥离了整个代码并创建了一个小函数来测试令牌的获取并使用该userProfileManager.getUserInfo函数进行验证。

注意:请忽略仅用于提供代码片段的反模式。

const userProfileManager = require('ibmcloud-appid').UserProfileManager;

userProfileManager.init({
  oauthServerUrl: process.env.APPID_URL,
  profilesUrl: process.env.APPID_PROFILES_URL,
});

const config = {
  tenantId: process.env.TENANT_ID,
  clientId: process.env.CLIENT_ID,
  secret: process.env.CLIENT_SECRET,
  oauthServerUrl: process.env.APPID_URL,
  profilesUrl: process.env.APPID_PROFILES_URL,
};

let token = '';

const { TokenManager } = require('ibmcloud-appid');

const tokenManager = new TokenManager(config);

const getAppIdentityToken = async () => {
  tokenManager
    .getApplicationIdentityToken()
    .then((appIdAuthContext) => {
      console.log(` Access tokens from SDK : ${JSON.stringify(appIdAuthContext)}`);
      token = appIdAuthContext.accessToken;
    })
    .then(async () => {
      const data = await userProfileManager.getUserInfo(token);
      console.log(data);
    })
    .catch((err) => {
      console.error(err);
    });
};

exports.getAppIdentityToken = getAppIdentityToken;

4

2 回答 2

0

TokenManager 用于自定义身份或应用程序身份流。应用程序身份流用于应用程序之间的通信(即 client_credentials 授权类型)。获取用户信息是用户到应用程序的通信(例如授权代码授权类型),因此您需要用户的访问令牌。您可以从会话中获取该令牌,前提是用户已登录:

accessToken = req.session[WebAppStrategy.AUTH_CONTEXT].accessToken;

有关更多详细信息,请参阅 SDK 的 README:https ://github.com/ibm-cloud-security/appid-serversdk-nodejs#manage-user-profile

你的用例是什么?您可能不需要使用 UserProfileManager 发出此附加请求。您可以在身份令牌中找到用户信息,并且可以使用自定义声明映射https://cloud.ibm.com/docs/appid?topic=appid-customizing-tokens向令牌添加其他信息

于 2020-07-01T16:21:34.337 回答
0

我相信有些混乱。

  1. AppID 是一项 IBM Cloud 服务,您可以作为 IBM Cloud 用户管理该服务。这需要您登录或拥有 API 密钥或访问令牌。

  2. 然后,AppID 能够管理用户和访问。为此,有自助操作以及用于使用应用程序或其他资源的访问令牌。

在我看来,您为 2) 生成了一个令牌,但执行需要 IAM 令牌的用户配置文件访问

于 2020-06-30T07:27:10.560 回答