首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键盘斗篷内省终点

键盘斗篷内省终点
EN

Stack Overflow用户
提问于 2021-01-13 20:55:06
回答 1查看 2.8K关注 0票数 2

我正在尝试从我的前端应用程序访问我的Keycloak服务器/openid-connect/token/introspect中的内省端点,但是我得到了下一个错误:

代码语言:javascript
复制
Access to fetch at 'http://localhost:8180/auth/realms/backoffice/protocol/openid-connect/token/introspect' from origin 'http://localhost:8080' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 
If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

使用Postman,curl或Node应用程序,这个请求可以正常工作,但是从我的前端应用程序使用fetch方法就会发现这个错误。我不确定是否可以从浏览器中的前端应用程序中查询内省端点,或者是否只能从服务器应用程序中查询。

其他端点,如:

  • openid-连接/令牌:
  • openid-连接/userinfo:

使用邮递员JS代码很好。

Keycloak配置

我在Keycloak的客户已经建立了网络起源*访问类型机密

客户代码

我的前端应用程序就是邮递员代码JS,我使用节点http-server部署它。

代码语言:javascript
复制
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");

var urlencoded = new URLSearchParams();
urlencoded.append("client_id", "my-client");
urlencoded.append("client_secret", "my-secret");
urlencoded.append("token", "eyJ...oCA");

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: urlencoded,
  redirect: 'follow'
};

fetch("http://localhost:8180/auth/realms/backoffice/protocol/openid-connect/token/introspect", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

报头响应

userinfo端点中的头响应带有访问控制-允许-原产地和访问控制-允许-凭据,但是不存在于内省端点中。

EN

回答 1

Stack Overflow用户

发布于 2021-01-14 09:10:28

从外观上看,Keycloak服务器防止为内省端点设置CORS头。这可能是个bug,也可能是故意的。我试过了,我也犯了同样的错误。

如果您真的想从web应用程序访问内省端点,您可以在您的Keycloak服务器前面设置一个NGINX反向代理,并使用它添加缺少的标题。

尽管如此,根据oauth.com的说法,您不应该让公众可以使用内省端点,因为任何人都可以从您的web应用程序中检索客户端id和机密。

如果内省端点处于打开状态,且没有节流,则它为攻击者提供了一种方法,让攻击者轮询端点以获取有效的令牌。要防止这种情况发生,服务器必须要求使用端点对客户端进行身份验证,或者仅通过防火墙等其他方法使内部服务器可以使用该端点。

这可以解释不允许CORS的决定。

另一件事是,您似乎忘记设置token_type_hint,查看这个堆栈溢出帖子以获得更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65709638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档