获取当前登录用户的KeyClope JavaScript API
我们计划使用keydape来保护一系列web应用程序,一些是用Java编写的,一些是用JavaScript编写的(带有React) 在用户通过KeyClope登录后,每个web应用程序都需要检索已登录的用户以及该用户拥有的领域/客户端角色获取当前登录用户的KeyClope JavaScript API,javascript,authorization,keycloak,Javascript,Authorization,Keycloak,我们计划使用keydape来保护一系列web应用程序,一些是用Java编写的,一些是用JavaScript编写的(带有React) 在用户通过KeyClope登录后,每个web应用程序都需要检索已登录的用户以及该用户拥有的领域/客户端角色 对于Java应用程序,我们尝试了keydape Java API(请求->keydapertecuritycontext->getIdToken->getPreferredUsername/getOtherClaims)。他们似乎工作得很好 对于JavaSc
- 对于Java应用程序,我们尝试了keydape Java API
。他们似乎工作得很好(请求->keydapertecuritycontext->getIdToken->getPreferredUsername/getOtherClaims)
- 对于JavaScript应用程序,我们尝试了以下代码,但未能成功将Key斗篷设置为init(请注意,这是在web应用程序代码中,在用户已通过Key斗篷验证后,该应用程序仅尝试检索以何种角色登录的用户):
谢谢。您的代码要求KeyClope客户端库进行初始化,但它不会执行用户登录或检查用户是否已登录 详情请参阅手册: 您可能想做的事情:
- 将check sso添加到init以检查用户是否已登录,并检索凭据
。您甚至可以使用所需的登录名keydove.init({onLoad:'check sso'…})
- 确保为前端注册一个单独的客户端。Java后端客户机的类型为机密(或仅限承载),而JavaScript客户机的类型为公共
onAuthSuccess
一旦您在前端使用keydove,您很快就会希望在后端调用REST资源时查看承载令牌。此时您可能已经解决了这个问题。我希望这个答案能帮助其他陷入困境的人 当您使用JavaScript应用程序时 下面的javascript应该被添加到html页面中
<script src="http://localhost:8080/auth/js/keycloak.js"></script>
<script>
/* If the keycloak.json file is in a different location you can specify it:
Try adding file to application first, if you fail try the another method mentioned below. Both works perfectly.
var keycloak = Keycloak('http://localhost:8080/myapp/keycloak.json'); */
/* Else you can declare constructor manually */
var keycloak = Keycloak({
url: 'http://localhost:8080/auth',
realm: 'Internal_Projects',
clientId: 'payments'
});
keycloak.init({ onLoad: 'login-required' }).then(function(authenticated) {
alert(authenticated ? 'authenticated' : 'not authenticated');
}).catch(function() {
alert('failed to initialize');
});
function logout() {
//
keycloak.logout('http://auth-server/auth/realms/Internal_Projects/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri')
//alert("Logged Out");
}
</script>
/*如果keydape.json文件位于其他位置,则可以指定它:
首先尝试将文件添加到应用程序,如果失败,请尝试下面提到的另一种方法。两者都能完美地工作。
var keydove=keydove('http://localhost:8080/myapp/keycloak.json'); */
/*否则您可以手动声明构造函数*/
var keydove=keydove({
网址:'http://localhost:8080/auth',
领域:'内部_项目',
客户ID:“付款”
});
init({onLoad:'login required'}){
警报(已验证?'authenticated':'notauthenticated');
}).catch(函数(){
警报(“初始化失败”);
});
函数注销(){
//
keydape.logout('http://auth-server/auth/realms/Internal_Projects/protocol/openid-connect/logout?redirect_uri=encodedRedirectUri')
//警报(“注销”);
}
参考链接
注意:阅读添加json凭据的两种方法的注释。
<script src="http://localhost:8080/auth/js/keycloak.js" type="text/javascript"></script>
<script type="text/javascript">
const keycloak = Keycloak({
"realm": "yourRealm",
"auth-server-url": "http://localhost:8080/auth",
"ssl-required": "external",
"resource": "yourRealm/keep it default",
"public-client": true,
"confidential-port": 0,
"url": 'http://localhost:8080/auth',
"clientId": 'yourClientId',
"enable-cors": true
});
const loadData = () => {
console.log(keycloak.subject);
if (keycloak.idToken) {
document.location.href = "?user="+keycloak.idTokenParsed.preferred_username;
console.log('IDToken');
console.log(keycloak.idTokenParsed.preferred_username);
console.log(keycloak.idTokenParsed.email);
console.log(keycloak.idTokenParsed.name);
console.log(keycloak.idTokenParsed.given_name);
console.log(keycloak.idTokenParsed.family_name);
} else {
keycloak.loadUserProfile(function() {
console.log('Account Service');
console.log(keycloak.profile.username);
console.log(keycloak.profile.email);
console.log(keycloak.profile.firstName + ' ' + keycloak.profile.lastName);
console.log(keycloak.profile.firstName);
console.log(keycloak.profile.lastName);
}, function() {
console.log('Failed to retrieve user details. Please enable claims or account role');
});
}
};
const loadFailure = () => {
console.log('Failed to load data. Check console log');
};
const reloadData = () => {
keycloak.updateToken(10)
.success(loadData)
.error(() => {
console.log('Failed to load data. User is logged out.');
});
}
keycloak.init({ onLoad: 'login-required' }).success(reloadData);
</script>
const keydove=keydove({
“领域”:“你的领域”,
“身份验证服务器url”:http://localhost:8080/auth",
“需要ssl”:“外部”,
“资源”:“yourRealm/保持默认值”,
“公众客户”:没错,
“机密端口”:0,
“url”:http://localhost:8080/auth',
“客户ID”:“yourClientId”,
“启用cors”:真
});
常量加载数据=()=>{
console.log(keydove.subject);
if(keydape.idToken){
document.location.href=“?user=“+keydape.idTokenParsed.preferred\u用户名;
log('IDToken');
log(keydape.idTokenParsed.preferred\u用户名);
log(keydove.idTokenParsed.email);
log(keydove.idTokenParsed.name);
log(keydove.idTokenParsed.given_name);
log(keydove.idTokenParsed.family_name);
}否则{
loadUserProfile(函数(){
console.log(“帐户服务”);
log(keydeport.profile.username);
console.log(keydove.profile.email);
console.log(keydove.profile.firstName+“”+keydove.profile.lastName);
console.log(keydove.profile.firstName);
log(keydeport.profile.lastName);
},函数(){
console.log('检索用户详细信息失败。请启用声明或帐户角色');
});
}
};
常量加载失败=()=>{
console.log('加载数据失败。请检查控制台日志');
};
常量重载数据=()=>{
keydepeat.updateToken(10)
.成功(加载数据)
.错误(()=>{
console.log('加载数据失败。用户已注销');
});
}
init({onLoad:'login required'});
简单的javascript客户端身份验证没有框架。
对于仍在寻找的人…您的密码已过期。你能提供一个新的吗?你的帖子让我意识到我不需要调用.loadUseProfile(),我只需要使用idTokenParsed…太棒了,谢谢!!
<script src="http://localhost:8080/auth/js/keycloak.js" type="text/javascript"></script>
<script type="text/javascript">
const keycloak = Keycloak({
"realm": "yourRealm",
"auth-server-url": "http://localhost:8080/auth",
"ssl-required": "external",
"resource": "yourRealm/keep it default",
"public-client": true,
"confidential-port": 0,
"url": 'http://localhost:8080/auth',
"clientId": 'yourClientId',
"enable-cors": true
});
const loadData = () => {
console.log(keycloak.subject);
if (keycloak.idToken) {
document.location.href = "?user="+keycloak.idTokenParsed.preferred_username;
console.log('IDToken');
console.log(keycloak.idTokenParsed.preferred_username);
console.log(keycloak.idTokenParsed.email);
console.log(keycloak.idTokenParsed.name);
console.log(keycloak.idTokenParsed.given_name);
console.log(keycloak.idTokenParsed.family_name);
} else {
keycloak.loadUserProfile(function() {
console.log('Account Service');
console.log(keycloak.profile.username);
console.log(keycloak.profile.email);
console.log(keycloak.profile.firstName + ' ' + keycloak.profile.lastName);
console.log(keycloak.profile.firstName);
console.log(keycloak.profile.lastName);
}, function() {
console.log('Failed to retrieve user details. Please enable claims or account role');
});
}
};
const loadFailure = () => {
console.log('Failed to load data. Check console log');
};
const reloadData = () => {
keycloak.updateToken(10)
.success(loadData)
.error(() => {
console.log('Failed to load data. User is logged out.');
});
}
keycloak.init({ onLoad: 'login-required' }).success(reloadData);
</script>