异行星低代码平台--单点登录 API

外接应用登录到管理后台

准备事项

1、 异行星低代码平台需要配置环境变量开启单点登录功能,在 .env.local中添加:

# JWT SSO
adminos_IDENTITY_JWT_ENABLED=true

过程描述

1、外接应用在自定义服务端接口中生成jwt

2、外接应用在浏览器端跳转至异行星低代码平台接口 GET {root_url}/accounts/jwt/login?t={jwt}&redirect={redirectURL} 实现单点登录;

示例

1、异行星低代码平台里新建应用 指定好 API名称(如:finance)、API密钥(如:app_api_secret);

2、外接应用前端按钮调用自定义接口(如:GET /api/get/token),在自定义接口中生成jwt;

module.exports = {
    sso: function (object_name, record_id) {
        const getTokenURL = '/api/get/token'; // 自定义接口

        // 生成令牌
        const result = adminos.authRequest(getTokenURL, {
            type: 'GET',
            async: false,
            contentType: 'application/json'
        });

        const token = result.token;
        const PLATFORM_ROOT_URL = 'https://5000-adminos-adminosprojectt-5apf195eq37.ws-us77.gitpod.io' // 异行星低代码平台访问地址,由管理后台提供
        // 跳转到异行星低代码平台
        window.open(`${PLATFORM_ROOT_URL}/accounts/jwt/login?t=${token}&redirect=${PLATFORM_ROOT_URL}`, '_blank') // 浏览器打开新窗口

    },
    ssoVisible: function () {
        return true
    }
}

3、自定义服务端接口。

// nodejs示例
const express = require("express");
const router = express.Router();
const core = require('@adminos/core');
const jwt = require('jsonwebtoken');

/**
 * 生成令牌
 */
router.get('/api/get/token', core.requireAuthentication, async function (req, res) {
    const userSession = req.user;

    var secret = 'app_api_secret' // 应用的API 密钥,由管理后台提供
    var options = { expiresIn: 30 } // 30秒有效
    var token = jwt.sign({
        profile: {
            email: userSession.email // 当前用户邮件
        },
        app_code: 'finance' // 应用的API 名称,由管理后台提供
    }, secret, options);

    res.status(200).send({
        token: token
    });
});
exports.default = router;

异行星低代码平台登录到外接应用

过程描述

1、异行星低代码平台后台里新建应用,指定好 外部链接、API密钥;

2、应用程序启动器中点击外接应用跳转到外部链接并在url上带上 t 参数

3、外接应用解析 t 参数,成功后跳转到应用内

示例

1、异行星低代码平台里新建应用,指定外部链接(如:GET https://5000-adminos-adminosprojectt-5apf195eq37.ws-us77.gitpod.io/api/sso )、API密钥(如:app_api_secret)

2、应用程序启动器中点击外接应用跳转到外部链接

https://5000-adminos-adminosprojectt-5apf195eq37.ws-us77.gitpod.io/api/sso?t=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvYmplY3RfbmFtZSI6InNwYWNlX3VzZXJzIiwiZG9jIjp7Il9pZCI6IkFGTkVuQ3hiU29HRWc0b2NmIiwibmFtZSI6Inh4eCIsInVzZXJuYW1lIjoieHh4eHh4IiwiZW1haWwiOiJzQHMuY29tIn0sImlhdCI6MTY2OTI2NjA0NiwiZXhwIjoxNjY5MjY5NjQ2fQ.qeld2kTl5zjLGjCWgk3cb6UPEPlqmzMaME20mo_t-t4

3、外接应用解析令牌

// nodejs 示例
const express = require("express");
const router = express.Router();
const jwt = require('jsonwebtoken')

router.get('/api/sso', async function (req, res) {
    console.log(req.query)
    // {
    //     t: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJvYmplY3RfbmFtZSI6InNwYWNlX3VzZXJzIiwiZG9jIjp7Il9pZCI6IkFGTkVuQ3hiU29HRWc0b2NmIiwibmFtZSI6Inh4eCIsInVzZXJuYW1lIjoieHh4eHh4IiwiZW1haWwiOiJzQHMuY29tIn0sImlhdCI6MTY2OTI2NjA0NiwiZXhwIjoxNjY5MjY5NjQ2fQ.qeld2kTl5zjLGjCWgk3cb6UPEPlqmzMaME20mo_t-t4'
    // }
    const payload = jwt.verify(req.query.t, 'app_api_secret') // 使用配置的 API密钥 验证并解析信息
    console.log(payload)
    // {
    //     profile: {
    //         name: 'xxx',
    //         username: 'xxxxxx',
    //         email: 's@s.com'
    //     },
    //     iat: 1669266046,
    //     exp: 1669269646
    // }

    res.status(200).send({ message: 'router ok' });
});
exports.default = router;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abelon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值