如何从 Okta 获取除姓名和电子邮件之外的用户信息?

How to get user info from Okta, other than name, surname and email?

我想从 Okta 获取其他信息,因为使用 this.props.auth.getUser() 我只会收到有关用户的电子邮件、姓名和姓氏。但是 Okta 上有很多数据,例如州、城市、街道地址、邮政编码等。

我正在使用 ReactJS 和 Node express 创建一个网络应用程序,登录由 Okta 管理 (https://developer.okta.com/),然后我想将有关用户的 Okta 信息存储在数据库中。

async checkAuthentication() {
  const authenticated = await this.props.auth.isAuthenticated();

  if (authenticated !== this.state.authenticated) {
    const user = await this.props.auth.getUser();

    console.log(this.props.auth);
    this.setState({
      authenticated,
      user
    });
    this.getUsers();
  }
}

async getUsers() {
  let params = "";
  let url = "";

  if (this.state.user != null) {
    params += "EMAIL=" + this.state.user.email;
  }

  url = params == null ? "/user" : "/user?";
  url += params;
  this.state.users = await this.fetch('get', url);

  if (this.state.users && Object.keys(this.state.users).length == 0) {
    this.saveUser();
  }
}

async saveUser() {
  var user = {
    EMAIL: this.state.user.email,
    NAME: this.state.user.given_name,
    SURNAME: this.state.user.family_name,
    //ORGANIZATION: "this.state.user.organization",
    //PHONE = "this.state.user.primaryPhone",
    //STATE = "this.state.user.state",
    //STREET_ADDRESS = "this.state.user.streetAddress",
    //ZIP_CODE = "this.state.user.zipCode",
  };

  await this.fetch('post', '/user', user);
}

这里我想保存Okta的其他数据。

//ORGANIZATION: "this.state.user.organization",
//PHONE = "this.state.user.primaryPhone",
//STATE = "this.state.user.state",
//STREET_ADDRESS = "this.state.user.streetAddress",
//ZIP_CODE = "this.state.user.zipCode",

您需要指定您想要的范围。 Okta 具有以下默认范围 offline_access、phone、地址、电子邮件、配置文件、openid.In 配置,您可以使用这些文档 https://developer.okta.com/authentication-guide/implementing-authentication/

auth.getUser() returns 用户通过其获得身份验证和授权的授权服务器上的 /userinfo 端点下可用的详细信息,如此处所述。

如果您还想在此 /endpoint 上发布其他详细信息,请执行以下操作:

  • 从您的 Okta 租户导航到管理员 >> API >> 授权服务器 >> 您的授权服务器
  • 在“声明”选项卡下,添加具有用户配置文件值的新声明,并在 "Include in token type"、select "ID Token" 和 "Userinfo / id_token request"