来自Angular2应用程序中Keycloak的access_token

时间:2017-09-29 20:00:35

标签: angular typescript keycloak

我使用angular-cli开发了一个Angular 4应用程序,我有一个spring-boot服务器,需要使用keylock access_token来访问客户端。当我调用端点时,我会在Angular服务类中附加令牌(当前是硬编码的)。

这很好用,但现在我需要摆脱硬编码令牌。

我有grant类型,客户端ID,客户端secrete以及带有application / x-www-form-urlencoded内容类型的keycloak URL。我从邮递员那里得到了这个令牌。

我正在寻找的是从keyclock获取大令牌然后每次我对我的后端服务进行HTTP调用时以编程方式将令牌附加到Authorization标头的最佳方法。

类似这样的事情

在我的keyclok-service.ts

header = new Headers({
'Content-Type': 'application/x-www-form-urlencoded',

});

 options = new RequestOptions({headers: this.header});

createAccessToken() {
const keyclock = new Keyclock('the grant type', 'the client id ', 'the cleitn secret');

return this.http.post('https:/keyclockserverurl/auth/realms/env/protocol/openid-connect/token', keyclock, this.options);

}

此代码提供两个错误 1. No' Access-Control-Allow-Origin'标头出现在请求的资源上

  1. " INVALID_REQUEST"找不到gratn_type
  2. 非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

我想出了问题,这是我送尸体的方式。正如你在我的post方法中看到的那样,我发送的body是一个用grant_type,client_id和client_secrete包装的keyclok对象。仅当内容类型为application / json时才有效,因为内容类型为&application; x-www-form-urlencoded',我需要以下面的格式发送正文

body = 'grant_type=yourGrantType&client_id=yourclientId&client_secret=yourclientSecrete';

这解决了遗漏grant_type的问题2。为了解决CROS问题,我创建了代理服务器。

要了解如何在angular-cli项目中创建代理服务器,请参阅 here