当前位置: 首页 > 知识库问答 >
问题:

键斗篷内省endpoint

蒋承教
2023-03-14

我正在尝试从我的前端应用程序访问KeyClope服务器/openid connect/token/introspect中的introspectendpoint,但我遇到下一个错误:

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.

使用邮递员,卷曲或节点应用程序此请求工作正常,但从我的前端应用程序使用获取方法会出现此错误。我不确定是否可以从浏览器中的前台应用程序查询内省endpoint,或者是否只能从服务器应用程序查询。

其他endpoint,如:

  • openid连接/令牌:
  • openid连接/用户信息:

使用Postman JS代码工作正常。

我在Key斗篷的客户已经设置了Web源*和访问类型机密。

我的前端应用程序就是Postman代码JS,我使用nodehttpserver部署它。

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));

userinfoendpoint中的头响应带有访问控制允许源和访问控制允许凭据,但在内省endpoint中不存在。

共有1个答案

衡玄裳
2023-03-14

从外观上看,KeyCloak服务器阻止为内省终结点设置CORS标头。这可能是一个错误或设计。我试过了,我得到了同样的错误。

如果你真的想从web应用程序访问内省endpoint,你可以在你的KeyClope服务器前设置一个NGINX反向代理,并使用它添加缺少的头。

尽管如此,根据oauth的说法。com你不应该让内省endpoint对公众开放,这是你目前正在做的事情,因为任何人都可以从你的web应用中检索客户端id和密码。

如果内省终结点处于打开状态且未受到限制,则攻击者可以轮询终结点以获取有效令牌。为了防止这种情况,服务器必须要求对使用endpoint的客户端进行身份验证,或者仅通过防火墙等其他方式使endpoint对内部服务器可用。

这可以解释为什么决定不允许CORS。

另一件事,您似乎忘记设置token\u type\u提示查看此stackoverflow帖子以了解更多信息。

 类似资料:
  • 我在Karaf(4.2.8)和Fuse(7.5.0)上与Keycloak集成进行了斗争。我分别尝试了这两种方法的集成,但没有成功。 接下来,我将包含适当内容的keycloak-direct-access.json文件添加到etc中。为了检查ssh的keycloak集成,我更改org.apache.karaf.shell并将realm设置为keycloak。但之后,我无法通过Client.bat使用

  • 在本文档之后,我使用KeyCloak11.0.2和Spring Security来保护我的Spring Boot应用程序。 我在中使用了基本的Keycloak配置: 我有一个单独的前端角应用程序,在Keylocak中配置为不同的客户端;但与Spring Boot应用程序的领域相同。从Angular应用程序中,我将在HTTP标头中发送KeyCloak提供的令牌: Angular示例应用程序:http

  • 我正在开发一个连接到java(Spring框架)后端的角webapp。身份验证是通过密钥斗篷服务器完成的。 在我的带有嵌入式tomcat服务器的本地机器上,angular应用程序和spring应用程序运行正常。 对于部署,我需要使用传统的方式,使用现有的tomcat服务器。 角度前端在根目录中通过http://myurl/spring后端作为war文件放置,可以通过http://myurl/api

  • 我试图使用Keycloak的openId-connectendpoint来获取关于用户角色的信息。我使用/auth/realms/moje/protocol/OpenID-connect/userinfoendpoint来获取关于已验证用户的信息。我可以获得姓名、用户名、电子邮件等信息。但是我不能强迫Keyclak给我关于用户角色的信息。 我已经阅读了openID文档,我没有找到任何关于必须获取角

  • 我用这个例子:https://github.com/foo4u/keycloak-spring-demo 我有钥匙斗篷。json文件在我的WEB-INF文件夹中,但当我运行应用程序时,会出现以下异常: 此异常的完整堆栈: 这段代码只是Spring Boot和KeyCloak集成的一个例子。 你能告诉我我做错了什么吗? 谢谢你的回答和时间。

  • 使用密钥斗篷创建组并为组分配角色。然后创建用户并将用户分配到特定的组。 要在我的应用程序中访问所有这些,我使用Python Keycoat 如github文档中所述,使用以下代码访问用户信息。 正在获取以下用户信息 如何访问用户的组和角色信息。