如何在角度中使用 keycloak 访问令牌

Tho*_*ert 4 keycloak angular

我已将 keycloak 适配器集成到我的 spring boot 应用程序中,如文档中所述。工作流程正在运行。最初,我在属性中使用会话令牌存储,但我想摆脱它并成为无状态的。因此,我将选项更改为 cookie 令牌存储。

我可以看到我的 Spring Boot 应用程序确实在 KEYCLOAK_ADAPTER_STATE cookie 中发送了 keycloak 访问令牌(屏幕截图)。正如预期的那样,它被标记为 HTTP cookie。

但是,当我查询后端时,进一步的角度 http 请求不会发送该 cookie,即使我在查询中打开 withCredentials 选项也是如此。

let options : RequestOptions = new RequestOptions();
options.withCredentials = true;
this.http.get('myservice', options)
Run Code Online (Sandbox Code Playgroud)

如何在无状态 http 调用中使用该令牌?

非常感谢 !

Dil*_*ody 5

正如Angular-keycloak 文档中所解释的那样,HttpClient 拦截器默认会添加 Authorization 标头,格式如下: Authorization:TOKEN从应用程序到服务器的所有 HTTP 请求的承载者。

您可以在 HTTPClient 拦截器配置中配置要排除在使用 keycloak 令牌添加 HTTP 授权标头之外的请求 URL。

HttpClient 拦截器可以在 app-init.ts 中的 keycloak 初始化函数中进行配置(请参阅 angular-keycloak 文档),如下所示;

import { KeycloakService } from 'keycloak-angular';

export function initializer(keycloak: KeycloakService): () => Promise<any> {
    return (): Promise<any> => keycloak.init({
        config: {
            url: 'http://localhost:8080/auth',
            realm: 'your-realm',
            clientId: 'client-id'
        },
        initOptions: {
            onLoad: 'login-required',
            checkLoginIframe: false
        },
        enableBearerInterceptor: true,
        bearerPrefix: 'Bearer',
        bearerExcludedUrls: [
            '/assets',
            '/clients/public']
    });
}
Run Code Online (Sandbox Code Playgroud)