2014-07-01 110 views
0

我试图通过遵循http://openid.net/specs/openid-connect-core-1_0.html来实现OpenID-Connect。 我被困在第3.1.2.1节 它表示客户端必须通过GET或POST发送认证请求。 我试过在节点中。NodeJS OpenID Connect身份验证请求

这里是我的index.js(客户端:依赖方)

var express = require('express'); 
var router = express.Router(); 
var querystring = require('querystring'); 
var http = require('http'); 

var id_token = { 
    iss : true, 
    sub : true, 
    aud : true, 
    exp : true, 
    iat : true, 
    auth_time : false, 
    nonce : false, 
    acr : false, 
    amr : false, 
    azp : false 
}; 

var auth_request = { 
    scope : true, 
    response_type : true, 
    client_id : true, 
    redirect_uri : true, 
    state : true, 
    response_mode : false, 
    nonce : false, 
    display : false, 
    prompt : false, 
    max_age : false, 
    ui_locales : false, 
    id_token_hint : false, 
    login_hint : false, 
    acr_values : false 
}; 

/* GET home page. */ 
router.get('/', function(req, res) { 
    res.render('index', { title: 'Express' }); 
}); 

router.post('/', function(req, res) { 
    var formcontent = req.body; 
    if (formcontent.hasOwnProperty("oauth-request")){ 
     var oauthrequest = querystring.stringify(auth_request); 
     var options = { 
      host: 'localhost', 
      port: 3000, 
      path: '/users', 
      method: 'POST', 
      headers: { 
       'Content-Type': 'application/x-www-form-urlencoded', 
       'Content-Length': oauthrequest.length 
      } 
     }; 

     var req = http.request(options, function(response){ 
      response.setEncoding('utf8'); 
      var str = '' 
      response.on('data', function (chunk) { 
       str += chunk; 
      }); 

      response.on('end', function() { 
       console.log(str); 

      }); 
     }); 
     req.write(oauthrequest); 
     req.end(); 
    } 
}); 

module.exports = router; 

这里是我的用户代码:(身份验证服务器)

var express = require('express'); 
var router = express.Router(); 

/* GET users listing. */ 
router.get('/', function(req, res) { 
    res.send('respond with a resource'); 
}); 
router.post('/', function(req, res) { 
    //console.log(req.body);  
    res.writeHead(200, {"Content-Type": "text/html"}); 
    res.write( 
     "<!DOCTYPE html>" + 
     "<html lang='en' dir='ltr'>" + 
      "<head>" + 
       "<meta charset='utf-8'>" + 
       "<title>Hola Mundo</title>" + 
      "</head>" + 
      "<body>" + 
       "<script type='text/javascript'>alert('Hello World')</script>" + 
      "</body>" + 
      "</html>"); 
    res.end(); 
    //res.send(req.body); 
}); 

module.exports = router; 

正如在3.1节中提到。 2.1认证请求的范围属性可以弹出,所以我认为认证应该能够打开一个弹出窗口询问用户的登录。但是我无法打开身份验证服务器端的弹出窗口。 有人可以通过打开弹出窗口来请求服务器端的用户登录或检查用户是否已登录,从而帮助我获得代码?

回答

1

它出现很多缺失部分:令牌端点等您可能想看看passport

看看任何的实现(在提供商)(这一个特别是实现OIDC:https://github.com/auth0/passport-auth0,但可能有其他)。

(authz)服务器端可以用oauthorize toolkit实现。

+0

感谢您的联系。我知道我现在还没有完成整个实施。但如果你去链接我分享。我试图用代码实现3.1.1。我对链接3.1.1中的前4个步骤感到困惑。 [链接](http://openid.net/specs/openid-connect-core-1_0.html) – skjindal93

+0

请帮我这个。 – skjindal93