我已将 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 调用中使用该令牌?
非常感谢 !
正如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)
归档时间: |
|
查看次数: |
21218 次 |
最近记录: |