Przeglądaj źródła

finish flow only without wait final test

Starink 6 lat temu
rodzic
commit
e9df46d4e0

+ 9 - 8
package.json

@@ -18,13 +18,12 @@
     "@vue-space/icons": "^0.0.1-alpha.2",
     "@vue-space/styles": "^0.0.1-alpha.2",
     "axios": "^0.19.2",
+    "bcrypt": "^3.0.8",
     "cross-env": "^5.2.0",
+    "debug": "^4.1.1",
     "element-ui": "^2.4.11",
+    "jsonwebtoken": "^8.5.1",
     "koa": "^2.6.2",
-    "nuxt": "^2.0.0",
-
-    "bcrypt": "^3.0.8",
-    "debug": "^4.1.1",
     "koa-bodyparser": "^4.2.1",
     "koa-convert": "^1.2.0",
     "koa-helmet": "^5.2.0",
@@ -34,12 +33,14 @@
     "koa-mount": "^4.0.0",
     "koa-onerror": "^4.1.0",
     "koa-router": "^7.4.0",
+    "koa-session": "^5.13.1",
     "koa-static": "^5.0.0",
     "koa-views": "^6.2.0",
     "koa2-cors": "^2.0.6",
     "lodash": "^4.17.15",
     "mysql": "^2.18.1",
     "mysql2": "^2.1.0",
+    "nuxt": "^2.0.0",
     "oidc-provider": "^6.23.1",
     "openid-client": "^3.14.0",
     "pug": "^2.0.3",
@@ -50,13 +51,13 @@
   "devDependencies": {
     "@vue/test-utils": "^1.0.0-beta.27",
     "babel-jest": "^24.1.0",
+    "chai": "^4.2.0",
     "jest": "^24.1.0",
+    "mocha": "^7.0.1",
     "node-sass": "^4.13.1",
-    "sass-loader": "^8.0.2",
-    "vue-jest": "^4.0.0-0",
     "nodemon": "^1.19.1",
-    "chai": "^4.2.0",
+    "sass-loader": "^8.0.2",
     "supertest": "^4.0.2",
-    "mocha": "^7.0.1"
+    "vue-jest": "^4.0.0-0"
   }
 }

+ 1 - 1
server/config/secret.json

@@ -1,3 +1,3 @@
 {
-  "sign": "seec-portal"
+  "sign": "seec-1919810-OIDC-114514"
 }

+ 9 - 6
server/controller/auth.js

@@ -2,8 +2,8 @@ const Response = require('../util/response');
 
 class AuthController{
     static checkClient(ctx){
-        const allowed_client_ids = ['seec-portal-1919810-114514'];
-        const allowed_redirect_domains = ['localhost:3000'];
+        const allowed_client_ids = ['seec-portal'];
+        const allowed_redirect_domains = ['localhost:3000', 'localhost:8000'];
 
         const query = ctx.query;
         console.log('query', query);
@@ -22,10 +22,13 @@ class AuthController{
             if(allowed_redirect_domains.indexOf(domain) < 0){
                 ctx.body=Response.failed("非法请求,拒绝访问");
             }else{
-                ctx.cookies.set('redirect_uri', redirect_uri, {
-                    maxAge:60*1000*3
-                });
-                ctx.redirect("/login");
+              ctx.cookies.set('redirect_uri', redirect_uri, {
+                maxAge:60*1000*3
+              });
+              ctx.cookies.set('client_id', client_id, {
+                maxAge:60*1000*3
+              });
+              ctx.redirect("/login");
             }
         }
 

+ 20 - 10
server/controller/user.js

@@ -19,16 +19,26 @@ class UserController {
             if(!confirmRes){
                 ctx.body = Response.failed('密码错误,请重试')
             }else{
-                console.log('ctx',ctx);
-                // ctx.redirect("/");
-
-                const token = jwt.sign({
-                    name: user.name,
-                    id: user.id
-                }, secret.sign, { expiresIn: '2h' });
-                ctx.body = Response.success(
-                    {user: {phone: user.phone, id: user.id, name: user.name},
-                        token: token});
+                // console.log('ctx',ctx);
+              console.log('ctx.cookies.redirect_uri',ctx.cookies.get('redirect_uri'));
+              let redirect_uri = ctx.cookies.get('redirect_uri');
+
+              let data = {
+                iss : 'http://'+ process.env.HOST,
+                sub: encodeURIComponent("uid=" + user.id + "&name=" + uid.name + "&phone=" + user.phone),
+                aud: ctx.cookies.get('client_id'),
+                auth_time: new Date().getTime() / 1000,
+                iat: new Date().getTime() / 1000,
+                exp: new Date().getTime() / 1000 + 24 * 60 * 60,
+              };
+              const token = jwt.sign(data, secret.sign);
+
+              ctx.set('Content-Type', 'application/x-www-form-urlencoded');
+              ctx.redirect(redirect_uri + "?id_token=" + token);
+
+                // ctx.body = Response.success(
+                //     {user: {phone: user.phone, id: user.id, name: user.name},
+                //         token: token});
             }
         } else {
             ctx.body = Response.failed('此账号不存在');

+ 41 - 41
server/index.js

@@ -74,8 +74,8 @@ app.use(function(ctx, next){
     });
 });
 //
-// // routes
-// app.use(router.routes(provider), router.allowedMethods());
+// routes
+app.use(router().routes(), router().allowedMethods());
 
 // error-handling
 app.on('error', (err, ctx) => {
@@ -84,45 +84,45 @@ app.on('error', (err, ctx) => {
 
 
 // SSO
-app.use(helmet());
-
-if (process.env.NODE_ENV === 'production') {
-    app.proxy = true;
-    set(configuration, 'cookies.short.secure', true);
-    set(configuration, 'cookies.long.secure', true);
-
-    app.use(async (ctx, next) => {
-        if (ctx.secure) {
-            await next();
-        } else if (ctx.method === 'GET' || ctx.method === 'HEAD') {
-            ctx.redirect(ctx.href.replace(/^http:\/\//i, 'https://'));
-        } else {
-            ctx.body = {
-                error: 'invalid_request',
-                error_description: 'do yourself a favor and only use https',
-            };
-            ctx.status = 400;
-        }
-    });
-}
-
-(async () => {
-    let adapter;
-    if (process.env.MONGODB_URI) {
-        adapter = require('./adapters/memory_adapter'); // eslint-disable-line global-require
-        // await adapter.connect();
-    }
-
-    const provider = new Provider(ISSUER, { adapter, ...configuration });
-
-    provider.use(helmet());
-
-    app.use(router(provider).routes(), router(provider).allowedMethods());
-    app.use(mount(provider.app));
-})().catch((err) => {
-    console.error(err);
-    process.exitCode = 1;
-});
+// app.use(helmet());
+//
+// if (process.env.NODE_ENV === 'production') {
+//     app.proxy = true;
+//     set(configuration, 'cookies.short.secure', true);
+//     set(configuration, 'cookies.long.secure', true);
+//
+//     app.use(async (ctx, next) => {
+//         if (ctx.secure) {
+//             await next();
+//         } else if (ctx.method === 'GET' || ctx.method === 'HEAD') {
+//             ctx.redirect(ctx.href.replace(/^http:\/\//i, 'https://'));
+//         } else {
+//             ctx.body = {
+//                 error: 'invalid_request',
+//                 error_description: 'do yourself a favor and only use https',
+//             };
+//             ctx.status = 400;
+//         }
+//     });
+// }
+//
+// (async () => {
+//     let adapter;
+//     if (process.env.MONGODB_URI) {
+//         adapter = require('./adapters/memory_adapter'); // eslint-disable-line global-require
+//         // await adapter.connect();
+//     }
+//
+//     const provider = new Provider(ISSUER, { adapter, ...configuration });
+//
+//     provider.use(helmet());
+//
+//     app.use(router(provider).routes(), router(provider).allowedMethods());
+//     app.use(mount(provider.app));
+// })().catch((err) => {
+//     console.error(err);
+//     process.exitCode = 1;
+// });
 
 // Import and Set Nuxt.js options
 const config = require('../nuxt.config.js')

+ 1 - 1
server/routes/index.js

@@ -5,7 +5,7 @@ const OIDCController = require('../controller/oidc');
 const AuthController = require('../controller/auth');
 const router = new Router({prefix: '/api'});
 
-module.exports = (provider) => {
+module.exports = () => {
     router.post('/user/login', UserController.login); // 登录
     router.post('/user/register', UserController.register);  // 登录(回调)
 

+ 41 - 2
yarn.lock

@@ -2537,6 +2537,14 @@ buffer@^4.3.0:
     ieee754 "^1.1.4"
     isarray "^1.0.0"
 
+buffer@^5.1.0:
+  version "5.5.0"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce"
+  integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww==
+  dependencies:
+    base64-js "^1.0.2"
+    ieee754 "^1.1.4"
+
 builtin-status-codes@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
@@ -3294,7 +3302,7 @@ core-js@^2.4.0, core-js@^2.6.5:
   resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c"
   integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==
 
-core-util-is@1.0.2, core-util-is@~1.0.0:
+core-util-is@1.0.2, core-util-is@^1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
   integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
@@ -3309,6 +3317,13 @@ cosmiconfig@^5.0.0:
     js-yaml "^3.13.1"
     parse-json "^4.0.0"
 
+crc@^3.4.4:
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+  integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+  dependencies:
+    buffer "^5.1.0"
+
 create-ecdh@^4.0.0:
   version "4.0.3"
   resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
@@ -5586,6 +5601,11 @@ is-ci@^2.0.0:
   dependencies:
     ci-info "^2.0.0"
 
+is-class-hotfix@~0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz#a527d31fb23279281dde5f385c77b5de70a72435"
+  integrity sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==
+
 is-color-stop@^1.0.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
@@ -5828,6 +5848,15 @@ is-symbol@^1.0.2:
   dependencies:
     has-symbols "^1.0.1"
 
+is-type-of@^1.0.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/is-type-of/-/is-type-of-1.2.1.tgz#e263ec3857aceb4f28c47130ec78db09a920f8c5"
+  integrity sha512-uK0kyX9LZYhSDS7H2sVJQJop1UnWPWmo5RvR3q2kFH6AUHYs7sOrVg0b4nyBHw29kRRNFofYN/JbHZDlHiItTA==
+  dependencies:
+    core-util-is "^1.0.2"
+    is-class-hotfix "~0.0.6"
+    isstream "~0.1.2"
+
 is-typedarray@~1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
@@ -6431,7 +6460,7 @@ jsonfile@^4.0.0:
   optionalDependencies:
     graceful-fs "^4.1.6"
 
-jsonwebtoken@8.5.1:
+jsonwebtoken@8.5.1, jsonwebtoken@^8.5.1:
   version "8.5.1"
   resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d"
   integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
@@ -6630,6 +6659,16 @@ koa-send@^5.0.0:
     mz "^2.7.0"
     resolve-path "^1.4.0"
 
+koa-session@^5.13.1:
+  version "5.13.1"
+  resolved "https://registry.yarnpkg.com/koa-session/-/koa-session-5.13.1.tgz#a47e39015a4b464e21e3e1e2deeca48eb83916ee"
+  integrity sha512-TfYiun6xiFosyfIJKnEw0aoG5XmLIwM+K3OVWfkz84qY0NP2gbk0F/olRn0/Hrxq0f14s8amHVXeWyKYH3Cx3Q==
+  dependencies:
+    crc "^3.4.4"
+    debug "^3.1.0"
+    is-type-of "^1.0.0"
+    uuid "^3.3.2"
+
 koa-static@^5.0.0:
   version "5.0.0"
   resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-5.0.0.tgz#5e92fc96b537ad5219f425319c95b64772776943"