Access the keycloak API from postman

后端 未结 5 2002
眼角桃花
眼角桃花 2020-12-31 02:40

I have tried to access the keycloak API from the postman. but it is showing 400 bad request.

I was calling api in the below format.

http://{hostname         


        
5条回答
  •  余生分开走
    2020-12-31 03:28

    did I create a Postman collection to help us to get start with keycloak API. Anyone can save the follow json, and import on Postman:

    {
    "info": {
        "_postman_id": "07a9d691-5b1c-4869-990b-551da29590fe",
        "name": "Keycloak",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "GET REALM",
            "request": {
                "method": "GET",
                "header": [],
                "url": {
                    "raw": "{{KEYCLOAK_URL}}admin/realms/{{KEYCLOAK_REALM}}",
                    "host": [
                        "{{KEYCLOAK_URL}}admin"
                    ],
                    "path": [
                        "realms",
                        "{{KEYCLOAK_REALM}}"
                    ]
                }
            },
            "response": []
        },
        {
            "name": "GET USERS",
            "event": [
                {
                    "listen": "prerequest",
                    "script": {
                        "id": "dfda403a-35b8-4704-840d-102eddac32e6",
                        "exec": [
                            ""
                        ],
                        "type": "text/javascript"
                    }
                }
            ],
            "protocolProfileBehavior": {
                "disableBodyPruning": true
            },
            "request": {
                "method": "GET",
                "header": [],
                "body": {
                    "mode": "urlencoded",
                    "urlencoded": []
                },
                "url": {
                    "raw": "{{KEYCLOAK_URL}}admin/realms/{{KEYCLOAK_REALM}}/users",
                    "host": [
                        "{{KEYCLOAK_URL}}admin"
                    ],
                    "path": [
                        "realms",
                        "{{KEYCLOAK_REALM}}",
                        "users"
                    ]
                }
            },
            "response": []
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "token",
                "value": "{{KEYCLOAK_TOKEN}}",
                "type": "string"
            }
        ]
    },
    "event": [
        {
            "listen": "prerequest",
            "script": {
                "id": "c3ae5df7-b1e0-4af1-988b-c592df3fd98e",
                "type": "text/javascript",
                "exec": [
                    "const echoPostRequest = {",
                    "  url: pm.environment.get('KEYCLOAK_URL') + 'realms/master/protocol/openid-connect/token',",
                    "  method: 'POST',",
                    "  header: 'Content-Type:application/x-www-form-urlencoded',",
                    "  body: {",
                    "    mode: 'urlencoded',",
                    "    urlencoded: [",
                    "        {key:'username', value:pm.environment.get('KEYCLOAK_USER')}, ",
                    "        {key:'password', value:pm.environment.get('KEYCLOAK_PASSWORD')}, ",
                    "        {key:'client_id', value:'admin-cli'}, ",
                    "        {key:'grant_type', value:'password'}",
                    "    ]",
                    "  }",
                    "};",
                    "",
                    "var getToken = true;",
                    "",
                    "if (!pm.environment.get('KEYCLOAK_TOKEN_EXPIRY') || ",
                    "    !pm.environment.get('KEYCLOAK_TOKEN')) {",
                    "    console.log('Token or expiry date are missing')",
                    "} else if (pm.environment.get('KEYCLOAK_TOKEN_EXPIRY') <= (new Date()).getTime()) {",
                    "    console.log('Token is expired')",
                    "} else {",
                    "    getToken = false;",
                    "    console.log('Token and expiry date are all good');",
                    "}",
                    "",
                    "if (getToken === true) {",
                    "    pm.sendRequest(echoPostRequest, function (err, res) {",
                    "    console.log(err ? err : res.json());",
                    "        if (err === null) {",
                    "            console.log('Saving the token and expiry date')",
                    "            var responseJson = res.json();",
                    "            pm.environment.set('KEYCLOAK_TOKEN', responseJson.access_token)",
                    "    ",
                    "            var expiryDate = new Date();",
                    "            expiryDate.setSeconds(expiryDate.getSeconds() + responseJson.expires_in);",
                    "            pm.environment.set('KEYCLOAK_TOKEN_EXPIRY', expiryDate.getTime());",
                    "        }",
                    "    });",
                    "}"
                ]
            }
        },
        {
            "listen": "test",
            "script": {
                "id": "fdb69bb4-14a5-43b4-97e2-af866643e390",
                "type": "text/javascript",
                "exec": [
                    ""
                ]
            }
        }
    ],
    "variable": [
        {
            "id": "698bbb41-d3f9-47f8-9848-4a1c32f9cca4",
            "key": "token",
            "value": ""
        }
    ],
    "protocolProfileBehavior": {}}
    

    And I created a pre-script to get the token and set on wich request, as you can see on the image below:

    You should create the follow environment variables: KEYCLOAK_USER, KEYCLOAK_PASSWORD and KEYCLOAK_URL, where the url must be https://{your keycloak installation}/auth/

提交回复
热议问题