Fiware 如何使用KeyRock验证java web应用程序?
我们正在尝试在我们的web应用程序(我们正在JavaSpringMVC中开发)中创建用户身份验证。对于我们的身份验证,我们希望使用从keyrock全局实例上的users fiware.lab帐户获取的令牌和用户信息 由于Keyrock基于OAuth2协议,从我们的web应用程序使用Keyrock的最佳方法是什么? 是否有一个java库可用于此目的? 有没有办法集成spring安全性或apache oltu? 每一个例子都比welecome好。 我们只有node.js的实现,但我们需要一个java版本的:Fiware 如何使用KeyRock验证java web应用程序?,fiware,Fiware,我们正在尝试在我们的web应用程序(我们正在JavaSpringMVC中开发)中创建用户身份验证。对于我们的身份验证,我们希望使用从keyrock全局实例上的users fiware.lab帐户获取的令牌和用户信息 由于Keyrock基于OAuth2协议,从我们的web应用程序使用Keyrock的最佳方法是什么? 是否有一个java库可用于此目的? 有没有办法集成spring安全性或apache oltu? 每一个例子都比welecome好。 我们只有node.js的实现,但我们需要一个java
var express=require('express');
var OAuth2=require('./OAuth2').OAuth2;
var config=require('./config');
//快速配置
var-app=express();
app.use(express.logger());
app.use(express.bodyParser());
use(express.cookieParser());
应用程序使用(express.session)({
秘密:“skjghskdjfhbqigohqdiouk”
}));
app.configure(函数(){
“严格使用”;
use(express.errorHandler({dumpExceptions:true,showStack:true}));
//app.use(express.logger());
app.use(express.static(uu dirname+/public));
});
//Config.js文件中的配置数据
var client_id=config.client_id;
var client_secret=config.client_secret;
var idmURL=config.idmURL;
var response_type=config.response_type;
var callbackURL=config.callbackURL;
//使用配置数据创建oauth库对象
var oa=新的OAuth2(客户端id,
客户的秘密,
伊德穆尔,
“/oauth2/authorize”,
“/oauth2/token”,
回调URL);
//处理对主页的请求
app.get('/',函数(req,res){
//如果认证令牌未存储在会话cookie中,它将发送一个按钮重定向到IDM认证门户
if(!请求会话访问\u令牌){
res.send(“Oauth2 IDM演示。
使用FI-WARE帐户登录”);
//如果auth_令牌存储在会话cookie中,它将发送一个按钮以获取用户信息
}否则{
res.send(“已成功验证。
您的oauth访问\u令牌:“+req.session.access\u令牌+”
获取我的用户信息”);
}
});
//使用访问代码处理来自IDM的请求
app.get('/login',函数(req,res){
//使用访问代码再次转到IDM以获取访问令牌
oa.getOAuthAccessToken(req.query.code,函数(e,结果){
//将访问令牌存储在会话cookie中
req.session.access\u令牌=results.access\u令牌;
res.redirect('/');
});
});
//重定向到IDM身份验证门户
app.get('/auth',函数(req,res){
var path=oa.getAuthorizeUrl(响应类型);
res.redirect(路径);
});
//向IDM询问用户信息
app.get('/user_info',函数(req,res){
var url=config.idmURL+'/user/';
//使用访问令牌向IDM询问用户信息
oa.get(url,req.session.access_令牌,函数(e,响应){
var user=JSON.parse(响应);
res.send(“欢迎”+user.displayName+”
您的电子邮件地址是“+user.email+”
注销”);
});
});
//处理注销请求以从会话cookie中删除访问令牌
app.get('/logout',函数(req,res){
req.session.access_令牌=未定义;
res.redirect('/');
});
log('Server listen in port 80.Connect to localhost');
app.listen(80);
编辑1
以下是我的设置:
以及调用令牌时得到的最终结果错误:
解释了oauth2流如何对抗KeyRock。
在这里,您还可以找到类似的链接,在这里您可以找到一些关于如何对一些最扩展的社交网络使用oauth2身份验证的示例。PS,您的问题不是完全可以理解的,因为它是多种语言的混合体。请更新帖子,以便任何人都能给你更好的反馈:)sry,我在翻译问题感谢反馈,我们只是在寻找一个完整的解决方案,比如node.jsWell,因为它确实不像提供的示例中那样“开箱即用”,文档非常简单,当然,这是一个完整的解决方案,您只需要将它集成到您的应用程序中(就像您必须使用
node.js
one一样)。我很久以前就没有接触过java,所以我想现在我不再有用了。只有几件事需要指出。为什么您要从“googleAPI”扩展而不是从“FiwareLAB”(您编写的另一个文件)扩展?你的代码将永远不会工作,因为你正在做对谷歌而不是Fiware的请求。。。请确保配置正确
var express = require('express');
var OAuth2 = require('./oauth2').OAuth2;
var config = require('./config');
// Express configuration
var app = express();
app.use(express.logger());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
secret: "skjghskdjfhbqigohqdiouk"
}));
app.configure(function () {
"use strict";
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
//app.use(express.logger());
app.use(express.static(__dirname + '/public'));
});
// Config data from config.js file
var client_id = config.client_id;
var client_secret = config.client_secret;
var idmURL = config.idmURL;
var response_type = config.response_type;
var callbackURL = config.callbackURL;
// Creates oauth library object with the config data
var oa = new OAuth2(client_id,
client_secret,
idmURL,
'/oauth2/authorize',
'/oauth2/token',
callbackURL);
// Handles requests to the main page
app.get('/', function(req, res){
// If auth_token is not stored in a session cookie it sends a button to redirect to IDM authentication portal
if(!req.session.access_token) {
res.send("Oauth2 IDM Demo.<br><br><button onclick='window.location.href=\"/auth\"'>Log in with FI-WARE Account</button>");
// If auth_token is stored in a session cookie it sends a button to get user info
} else {
res.send("Successfully authenticated. <br><br> Your oauth access_token: " +req.session.access_token + "<br><br><button onclick='window.location.href=\"/user_info\"'>Get my user info</button>");
}
});
// Handles requests from IDM with the access code
app.get('/login', function(req, res){
// Using the access code goes again to the IDM to obtain the access_token
oa.getOAuthAccessToken(req.query.code, function (e, results){
// Stores the access_token in a session cookie
req.session.access_token = results.access_token;
res.redirect('/');
});
});
// Redirection to IDM authentication portal
app.get('/auth', function(req, res){
var path = oa.getAuthorizeUrl(response_type);
res.redirect(path);
});
// Ask IDM for user info
app.get('/user_info', function(req, res){
var url = config.idmURL + '/user/';
// Using the access token asks the IDM for the user info
oa.get(url, req.session.access_token, function (e, response) {
var user = JSON.parse(response);
res.send("Welcome " + user.displayName + "<br> Your email address is " + user.email + "<br><br><button onclick='window.location.href=\"/logout\"'>Log out</button>");
});
});
// Handles logout requests to remove access_token from the session cookie
app.get('/logout', function(req, res){
req.session.access_token = undefined;
res.redirect('/');
});
console.log('Server listen in port 80. Connect to localhost');
app.listen(80);