我正在尝试从我的前端应用程序访问我的Keycloak服务器/openid-connect/token/introspect中的内省端点,但是我得到了下一个错误:
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方法就会发现这个错误。我不确定是否可以从浏览器中的前端应用程序中查询内省端点,或者是否只能从服务器应用程序中查询。
其他端点,如:
使用邮递员JS代码很好。
Keycloak配置
我在Keycloak的客户已经建立了网络起源*和访问类型机密。

客户代码
我的前端应用程序就是邮递员代码JS,我使用节点http-server部署它。
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端点中的头响应带有访问控制-允许-原产地和访问控制-允许-凭据,但是不存在于内省端点中。

发布于 2021-01-14 09:10:28
从外观上看,Keycloak服务器防止为内省端点设置CORS头。这可能是个bug,也可能是故意的。我试过了,我也犯了同样的错误。
如果您真的想从web应用程序访问内省端点,您可以在您的Keycloak服务器前面设置一个NGINX反向代理,并使用它添加缺少的标题。
尽管如此,根据oauth.com的说法,您不应该让公众可以使用内省端点,因为任何人都可以从您的web应用程序中检索客户端id和机密。
如果内省端点处于打开状态,且没有节流,则它为攻击者提供了一种方法,让攻击者轮询端点以获取有效的令牌。要防止这种情况发生,服务器必须要求使用端点对客户端进行身份验证,或者仅通过防火墙等其他方法使内部服务器可以使用该端点。
这可以解释不允许CORS的决定。
另一件事是,您似乎忘记设置token_type_hint,查看这个堆栈溢出帖子以获得更多信息。
https://stackoverflow.com/questions/65709638
复制相似问题