Fiware 如何使用KeyRock验证java web应用程序?

Fiware 如何使用KeyRock验证java web应用程序?,fiware,Fiware,我们正在尝试在我们的web应用程序(我们正在JavaSpringMVC中开发)中创建用户身份验证。对于我们的身份验证,我们希望使用从keyrock全局实例上的users fiware.lab帐户获取的令牌和用户信息 由于Keyrock基于OAuth2协议,从我们的web应用程序使用Keyrock的最佳方法是什么? 是否有一个java库可用于此目的? 有没有办法集成spring安全性或apache oltu? 每一个例子都比welecome好。 我们只有node.js的实现,但我们需要一个java

我们正在尝试在我们的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);