Okta 提供方 SSO 配置

页面摘要: Okta 是一个 SSO 提供方,允许用户在 auth.providers 数组中配置 OAuth2 凭据,通过其 Okta 账户登录并注册到 Strapi。

本页介绍如何为单点登录(SSO)功能设置 Okta 提供方。

WARNING

你已阅读如何配置 SSO 指南。

安装

安装 passport-okta-oauth20:

yarn

yarn add passport-okta-oauth20

npm

npm install --save passport-okta-oauth20

配置示例

Okta SSO 提供方在config/admin 文件的 auth.providers 数组中进行配置:

WARNING

设置 OKTA_DOMAIN 环境变量时,请确保包含协议(例如 https://example.okta.com)。如果不包含,将会导致重定向循环。

JavaScript


const OktaOAuth2Strategy = require("passport-okta-oauth20").Strategy;

module.exports = ({ env }) => ({
  auth: {
    // ...
    providers: [
      {
        uid: "okta",
        displayName: "Okta",
        icon: "https://www.okta.com/sites/default/files/Okta_Logo_BrightBlue_Medium-thumbnail.png",
        createStrategy: (strapi) =>
          new OktaOAuth2Strategy(
            {
              clientID: env("OKTA_CLIENT_ID"),
              clientSecret: env("OKTA_CLIENT_SECRET"),
              audience: env("OKTA_DOMAIN"),
              scope: ["openid", "email", "profile"],
              callbackURL:
                strapi.admin.services.passport.getStrategyCallbackURL("okta"),
            },
            (accessToken, refreshToken, profile, done) => {
              done(null, {
                email: profile.email,
                username: profile.username,
              });
            }
          ),
      },
    ],
  },
});

TypeScript


import { Strategy as OktaOAuth2Strategy } from "passport-okta-oauth20";

export default ({ env }) => ({
  auth: {
    // ...
    providers: [
      {
        uid: "okta",
        displayName: "Okta",
        icon: "https://www.okta.com/sites/default/files/Okta_Logo_BrightBlue_Medium-thumbnail.png",
        createStrategy: (strapi) =>
          new OktaOAuth2Strategy(
            {
              clientID: env("OKTA_CLIENT_ID"),
              clientSecret: env("OKTA_CLIENT_SECRET"),
              audience: env("OKTA_DOMAIN"),
              scope: ["openid", "email", "profile"],
              callbackURL:
                strapi.admin.services.passport.getStrategyCallbackURL("okta"),
            },
            (accessToken, refreshToken, profile, done) => {
              done(null, {
                email: profile.email,
                username: profile.username,
              });
            }
          ),
      },
    ],
  },
});