我如何摆脱keycloak的默认登录页面并使用我自己的登录页面
问题描述:
我正在使用wildfly 10.1.0.Final和keycloak 3.1.0.Final。我如何摆脱keycloak的默认登录页面并使用我自己的登录页面
我想用我自己的登录页面,我创建了一个登录页面与一个提交按钮获得令牌:
$('#submit').click(function(e) {
var creds = "client_id=sensorcloud-2.2.1-SNAPSHOT&grant_type=password&client_secret=b6b4f0ec-9936-46a2-9f40-69c207e2e0f2&username=" + $('#username')[0].value +"&password=" + $('#password')[0].value;
$.ajax({
url: 'https://localhost:8445/auth/realms/sensorcloud-auth/protocol/openid-connect/token',
data: creds,
headers: {'Content-Type':'application/x-www-form-urlencoded'},
type: 'POST',
success: function(data){
localStorage.setItem('currentUser', JSON.stringify(data));
window.location.replace("https://localhost:8443/sensorcloud-2.2.1-SNAPSHOT/dashboard.html");
},
error: function() {
alert("Invalid username or password");
}
});
});
和它的作品。
只有这样的代码,dashboard.html没有任何安全性约束可言,所以我成立了web.xml建议:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SensorCloud</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>KEYCLOAK</auth-method>
<realm-name>sensorcloud-auth</realm-name>
</login-config>
<context-param>
<param-name>resteasy.role.based.security</param-name>
<param-value>true</param-value>
</context-param>
<security-constraint>
<web-resource-collection>
<web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name>
<url-pattern>/rest/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name>
<url-pattern>/index.html</url-pattern>
<url-pattern>/help.html</url-pattern>
<url-pattern>/register.html</url-pattern>
<url-pattern>/login.html</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name>
<url-pattern>/dashboard.html</url-pattern>
<url-pattern>/management.html</url-pattern>
<url-pattern>/password.html</url-pattern>
<url-pattern>/user.html</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>user</role-name>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>sensorcloud-2.2.1-SNAPSHOT</web-resource-name>
<url-pattern>/admin.html</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
</web-app>
的公开页面可以像指数任何人访问.html,login.html。有些页面只能由用户和管理员访问,如dashboard.html,而admin.html只能由admin用户访问。
在我keycloak境界客户端设置,客户端sensorclout-2.2.1-SNAPSHOT,我有重定向URL作为
https://localhost:8443/sensorcloud-2.2.1-SNAPSHOT/ *
但每次当我尝试去dashboard.html,我将重定向keycloak默认登录页面。我想要重定向到我的自定义登录页面。
我该如何做到这一点?
感谢
答
当您设置客户端访问类型为“公共”,然后keycloak永远将用户重定向到其登录页面。您可以将访问类型设置为“bearer-only” - 在此情况下,keycloak不会重定向,但您需要通过身份验证才能访问受保护的资源。
如果像这样配置keycloak,那么当访问受保护的页面时,您需要实现一些过程,检查用户是否已经过身份验证,如果没有,则将其重定向到登录页面。
您是否尝试过使用Keycloak [主题](https://keycloak.gitbooks.io/documentation/server_development/topics/themes.html)功能?这不完全是你想要的,但你可能能够完成同样的事情。 – stdunbar
是的,我知道,但我们不想使用它。我们只是想使用keycloak作为认证服务器。 – LebroNan