【发布时间】:2021-05-12 20:09:59
【问题描述】:
我可以使用 keycloak-js 客户端登录 Keycloak,但是,在发出 fetch 请求时,我收到以下错误:
Access to fetch at 'https://xxxxxxxx.com/auth/realms/app_testing/protocol/openid-connect/token' from origin 'http://localhost:8080' has been blocked by CORS policy: 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.
我的发帖请求是
var formData = new FormData()
formData.append("client_id", 'vue_blog_gui');
formData.append("grant_type", "password");
formData.append("client_secret", "705669d0-xxxx-xxxx-xxxx-4f4e52e3196b");
formData.append("scope", "openid");
formData.append("username", "user@example.com")
formData.append("password", "123")
fetch(
'https://xxxxxxxx.com/auth/realms/app_testing/protocol/openid-connect/token',
{
method: 'POST',
'Content-Type': 'application/x-www-form-urlencoded',
data: formData
}
)
keycloak 设置是
- 根网址:
http://localhost:8080 - 有效的重定向 URI:
http://localhost:8080 - 基本网址:
/ - 管理 URL:空
- Web Origins:
*// 但我也尝试过http://localhost:8080和 +
我的应用在 http://localhost:8080 上运行
【问题讨论】:
-
@dreamcrash 我尝试了你所有的建议,但仍然遇到相同的 CORS 错误。
-
很抱歉听到这个消息,顺便说一句,由于安全问题,不建议将 Web Origins: 设置为 *
-
您尝试过i.stack.imgur.com/F27FK.png 吗?
-
@dreamcrash 我同意,但这只是为了节省人们询问我是否尝试过使用 * 作为来源的时间。哈哈
-
顺便说一句:直接访问授权不是很安全的身份验证方法。 SPA(例如 Vue)应该使用带有 PKCE 的授权代码流(基本的 vue 示例,但没有 PKCE keycloak.org/securing-apps/vue)。我知道每个 SPA 开发人员都会告诉我这对他更好,因为他将拥有自己精美的 SPA UI,而不是丑陋的 Keycloak 登录表单。 Np,请记住您的优先级是 UI 还是安全。
标签: javascript vue.js cors keycloak keycloak-services