我使用keycloak-js来保护我的sveltekit UI应用程序。
<script lang="ts">
import { onMount } from "svelte";
import Keycloak from "keycloak-js";
import type { KeycloakInitOptions } from "keycloak-js";
onMount( () => {
let instance = {
url: "http://localhost:8080",
realm: "my-realm",
clientId: "my-client"
};
let keycloak = new Keycloak(instance);
let initOptions: KeycloakInitOptions = { onLoad: "login-required"
};
keycloak.init(initOptions).then(function (authenticated) {
console.info("authorized);
}).catch(function () {
alert("unauthorized");
});
}
);
</script>
我在docker中部署的keycloak上收到这个错误。
WARN [org.keycloak.events] (executor-thread-69) type=CODE_TO_TOKEN_ERROR, realmId=..., clientId=my-client, userId=null, ipAddress=..., error=invalid_client_credentials, grant_type=authorization_code
从postman中检索令牌可以工作。
根据您的错误信息:
WARN [org.keycloak.events] (executor-thread-69) type=CODE_TO_TOKEN_ERROR, realmId=..., clientId=my-client, userId=null, ipAddress=..., error=invalid_client_credentials, grant_type=authorization_code
它看起来像Keycloak正在期待一个client secret
,这基于你的配置:
let instance = {
url: "http://localhost:8080",
realm: "my-realm",
clientId: "my-client"
};
推断客户端my-client
为机密客户端。但是,由于您使用的是javascript
适配器,因此实际上应该创建一个公共客户端,而不是一个机密客户端。
将客户端my-client
的access-type
从confidential改为public。