#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. Пожалуйста, помогите мне с этим.