如何使用keycloak api登录系统?

问题描述 投票:0回答:1

我有一个应用程序,其中用户的令牌在登录时会使用新数据进行更新。在进行自动测试时,我通过 keycloak api 获取访问令牌并将其与请求一起发送。但对于有效的令牌,我需要通过 api 登录系统。问题是,我应该使用哪个查询?这样的查询是否存在?

我在keycloak文档和各种文章中搜索了很多信息,但它们都只涉及到access-token的请求。另外,我知道有一个domain/realms/realm/login-actions/authenticate请求,但有效负载中有相当不清楚的参数。我不确定这是否是我所需要的。如果是这样,你能告诉我有效负载中应该包含什么吗?

testing keycloak keycloak-rest-api autotest
1个回答
0
投票

设置事件配置

PUT /admin/realms/{realm}/events/config

获取事件配置

GET /admin/realms/{realm}/events/config

获取事件

GET /admin/realms/{realm}/events

演示

get-events.js

const axios = require('axios');

const getMasterToken = async (userName, password) => {
    try {
        const resp = await axios.post(
            'http://localhost:8080/realms/master/protocol/openid-connect/token',
            new URLSearchParams({
                'client_id': 'admin-cli',
                'username': userName,
                'password': password,
                'grant_type': 'password'
            })
        );
        return resp.data.access_token;
    } catch (err) {
        console.error(err);
    }
};

const getEventConfig = async (token, realmName) => {
    try {
        const config = {
            headers: { Authorization: `Bearer ${token}` }
        };
       
        const url = `http://localhost:8080/admin/realms/${realmName}/events/config`;
        const response = await axios.get(url, config);

        if (response.status === 200) {
            return response.data;
        } else {
            console.error(`Failed to fetch client: Server responded with status ${response.status}`);
            return null;
        }
    } catch (error) {
        if (error.response) {
            console.error('Server responded with status:', error.response.status, 'Response data:', error.response.data);
        } else if (error.request) {
            console.error('No response received:', error.request);
        } else {
            console.error('Error setting up request:', error.message);
        }
        return null;
    }
};
const setEventConfig = async (token, realmName, data) => {
    try {
        const config = {
            headers: { Authorization: `Bearer ${token}` }
        };

        const url = `http://localhost:8080/admin/realms/${realmName}/events/config`;

        const response = await axios.put(url, data, config);

        if (response.status === 204) {
            console.log('Configuration updated successfully');
        } else {
            console.log('Unexpected response status:', response.status);
        }
    } catch (error) {
        console.error('Error updating configuration:', error);
    }
};

const getEvents = async (token, realmName) => {
    try {
        const config = {
            headers: { Authorization: `Bearer ${token}` }
        };
       
        const url = `http://localhost:8080/admin/realms/${realmName}/events`;
        const response = await axios.get(url, config);

        if (response.status === 200) {
            return response.data;
        } else {
            console.error(`Failed to fetch client: Server responded with status ${response.status}`);
            return null;
        }
    } catch (error) {
        if (error.response) {
            console.error('Server responded with status:', error.response.status, 'Response data:', error.response.data);
        } else if (error.request) {
            console.error('No response received:', error.request);
        } else {
            console.error('Error setting up request:', error.message);
        }
        return null;
    }
};

(async () => {

    const masterToken = await getMasterToken('admin', 'admin');
    const realmName = 'master';

    let eventConfig = await getEventConfig(masterToken, realmName);

    // Enable event config
    eventConfig.eventsEnabled = true;
    eventConfig.eventsExpiration = 600;

    await setEventConfig(masterToken, realmName, eventConfig);

    eventConfig = await getEventConfig(masterToken, realmName);

    const events = await getEvents(masterToken, realmName);
    console.log(JSON.stringify(events, null, 4));
})();

结果

[
    {
        "time": 1715375313887,
        "type": "LOGIN",
        "realmId": "99f7bcf2-2465-4285-977c-a0f5fdf485d6",
        "clientId": "admin-cli",
        "userId": "83093157-7c61-410c-95de-c3fac5ace9c5",
        "sessionId": "b418cfda-961d-41aa-afa1-3140861c3492",
        "ipAddress": "172.25.0.1",
        "details": {
            "auth_method": "openid-connect",
            "token_id": "489c263e-bf46-4dfa-8515-5f271526f07e",
            "grant_type": "password",
            "refresh_token_type": "Refresh",
            "scope": "profile email",
            "refresh_token_id": "104648f7-bccd-435d-8021-d24ddda8ccba",
            "client_auth_method": "client-secret",
            "username": "admin"
        }
    },
    {
        "time": 1715375087671,
        "type": "LOGIN",
        "realmId": "99f7bcf2-2465-4285-977c-a0f5fdf485d6",
        "clientId": "admin-cli",
        "userId": "83093157-7c61-410c-95de-c3fac5ace9c5",
        "sessionId": "9e94b599-ff01-4941-b34b-a25ff2a222a3",
        "ipAddress": "172.25.0.1",
        "details": {
            "auth_method": "openid-connect",
            "token_id": "f3404361-064e-437e-bb10-31302ea07bde",
            "grant_type": "password",
            "refresh_token_type": "Refresh",
            "scope": "profile email",
            "refresh_token_id": "85126c11-1a27-4350-9e64-2e34c158c9c7",
            "client_auth_method": "client-secret",
            "username": "admin"
        }
    },
    {
        "time": 1715375028759,
        "type": "LOGIN",
        "realmId": "99f7bcf2-2465-4285-977c-a0f5fdf485d6",
        "clientId": "admin-cli",
        "userId": "83093157-7c61-410c-95de-c3fac5ace9c5",
        "sessionId": "b96c3b4e-49c7-4971-a112-714b8bb94154",
        "ipAddress": "172.25.0.1",
        "details": {
            "auth_method": "openid-connect",
            "token_id": "f28bda0f-4d51-459b-8e0b-a124ba3dcc98",
            "grant_type": "password",
            "refresh_token_type": "Refresh",
            "scope": "profile email",
            "refresh_token_id": "ba5b25bd-018c-4e93-8877-be093955db4f",
            "client_auth_method": "client-secret",
            "username": "admin"
        }
    },
    {
        "time": 1715374085047,
        "type": "LOGIN",
        "realmId": "99f7bcf2-2465-4285-977c-a0f5fdf485d6",
        "clientId": "admin-cli",
        "userId": "83093157-7c61-410c-95de-c3fac5ace9c5",
        "sessionId": "74fff1e9-c123-4fe6-a770-89633440e2d4",
        "ipAddress": "172.25.0.1",
        "details": {
            "auth_method": "openid-connect",
            "token_id": "fcc7294f-e3ba-47ca-8e52-0ad0f82855f8",
            "grant_type": "password",
            "refresh_token_type": "Refresh",
            "scope": "profile email",
            "refresh_token_id": "c1a5efaf-b0d2-4822-a4e6-03b1f0a85cd4",
            "client_auth_method": "client-secret",
            "username": "admin"
        }
    },
    {
        "time": 1715374014186,
        "type": "LOGIN",
        "realmId": "99f7bcf2-2465-4285-977c-a0f5fdf485d6",
        "clientId": "admin-cli",
        "userId": "83093157-7c61-410c-95de-c3fac5ace9c5",
        "sessionId": "02e0e456-4627-4230-b3cc-6c27c604039e",
        "ipAddress": "172.25.0.1",
        "details": {
            "auth_method": "openid-connect",
            "token_id": "1fb3bb8c-5ba6-4a91-8ec1-b82566d93e75",
            "grant_type": "password",
            "refresh_token_type": "Refresh",
            "scope": "profile email",
            "refresh_token_id": "b2cdfb79-d9c5-424b-b223-cd77ee2fa8cf",
            "client_auth_method": "client-secret",
            "username": "admin"
        }
    }
]

enter image description here

更多详细信息

这里

© www.soinside.com 2019 - 2024. All rights reserved.