Запрос аутентификации NodeJS OpenID Connect

#node.js #oauth-2.0 #openid

#node.js #oauth-2.0 #OpenID

Вопрос:

Я пытался реализовать OpenID-Connect, следуяhttp://openid.net/specs/openid-connect-core-1_0.html. Я застрял в разделе 3.1.2.1, в котором говорится, что клиент должен отправить запрос на аутентификацию либо с помощью GET, либо по почте. Я пробовал это в node.

Вот мой 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:

Появляется много недостающих частей: конечные точки токена и т.д. Возможно, вы захотите взглянуть на паспорт.

Взгляните на любую из реализаций (в разделе Провайдеры) (эта, в частности, реализует OIDC:https://github.com/auth0/passport-auth0, но, вероятно, есть и другие).

Затем серверная часть (authz) может быть реализована с помощью oauthorize toolkit.

Комментарии:

1. Спасибо за ссылки. Я знаю, что на данный момент я не выполнил всю реализацию. Но если вы перейдете по ссылке, которой я поделился. Я пытаюсь реализовать 3.1.1 с помощью кода. И я немного запутался в том, как выполнить первые 4 шага в 3.1.1 по ссылке. Ссылка

2. Пожалуйста, помогите мне с этим.