Rumah > Soal Jawab > teks badan
Saya mempunyai apl risalah yang sedang dijalankan menggunakan Risalah biasa, HTML, CSS dan JS. Pada masa ini, ia hanya dalam folder dengan fail index.html, fail main.js dan folder dengan semua data saya. Data tersebut ialah data geojson. Saya akhirnya mahu data yang saya bekerjasama tidak boleh diakses oleh pengguna apabila saya meletakkannya dalam talian. Saya sedang mencari gambaran besar, garis besar bagaimana saya harus menyelesaikan masalah ini.
Saya sedang mempertimbangkan untuk menggunakan sesuatu seperti MongoDB untuk menyimpan data saya, tetapi tidak ada preseden atau tutorial dalam talian tentang cara melakukan perkara ini dengan Risalah. Ia juga nampaknya memerlukan banyak perubahan pada kod saya dan cuba menambah ekspres dan nod(?) pada aplikasi saya. Sebarang idea atau pautan kepada contoh akan sangat dihargai.
P粉5059175902024-02-26 00:38:30
Anda berfikir ke arah yang salah dengan MongoDB kerana ini tidak melindungi data anda dalam sebarang cara tambahan.
Tidak mungkin untuk menyediakan halaman web HTML biasa, tetapi untuk menyembunyikan data - kerana sesiapa sahaja boleh mencari akses dalam kod sumber HTML.
Apa yang anda perlukan ialah penyedia pihak ketiga yang menyokong OAuth, seperti:
Mereka akan mengeluarkan JWT kepada anda seperti yang ditunjukkan dalam dokumentasi Huawei di bawah, kemudian pada bahagian pelayan anda perlu mengesahkan token dan memutuskan sama ada untuk memberikan data tersebut.
Walaupun begitu, pelanggan yang diberi kuasa boleh mendapatkan dan mengedarkan data anda.
Saya tahu perkara ini kerana sebagai pembangun hobi saya menulis 2 permainan web dan saya menggunakan 4 perkhidmatan ini (ada lagi) untuk mengesahkan pengguna.
Ini adalah contoh kod Java sebelah pelayan saya untuk mengesahkan Kit Akaun Huawei:
private void handleHuaweiAuth(HttpServletRequest httpReq, HttpServletResponse httpResp) throws ServletException, IOException { String error = httpReq.getParameter("error"); String errorDescription = httpReq.getParameter("error_description"); String code = httpReq.getParameter("code"); String state = httpReq.getParameter("state"); // use hash of salt and current month name as CSRF protection String month = md5("PUT SOME SECRET HERE" + Calendar.getInstance().getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH)); if (error != null) { throw new ServletException(error + ": " + errorDescription); } else if (code != null && month.equals(state)) { MultiMappostParams = new MultiMap<>(); postParams.put("code", code); postParams.put("client_id", HUAWEI_ID); postParams.put("client_secret", HUAWEI_SECRET); postParams.put("redirect_uri", String.format(HUAWEI_REDIRECT_URI, mLanguage)); postParams.put("grant_type", "authorization_code"); try { String tokenStr = mHttpClient.POST(HUAWEI_TOKEN_URL) .headers(httpFields -> { httpFields.add(new HttpField(HttpHeader.ACCEPT, APPLICATION_JSON)); httpFields.add(new HttpField(HttpHeader.CONTENT_TYPE, APPLICATION_URLENCODED)); }) .body(new StringRequestContent(UrlEncoded.encode(postParams, StandardCharsets.UTF_8, false))) .send().getContentAsString(); LOG.info("handleHuaweiAuth tokenStr = {}", tokenStr); Map tokenMap = (Map ) new JSON().fromJSON(tokenStr); //String accessToken = tokenMap.get("access_token"); //String refreshToken = tokenMap.get("refresh_token"); // NOTE: the code is only valid for 1 usage. // If the user reloads this page, then the following will be returned: // {"sub_error":20156,"error_description":"code used twice","error":1101} // parsing token will result in NPE caught below and redirect to front page String idToken = tokenMap.get("id_token"); Map idMap = parseJwt(idToken); String sid = idMap.get("sub"); String photo = idMap.get("picture"); String given = idMap.get("given_name"); String family = idMap.get("family_name"); printGameApp(httpReq, httpResp, HUAWEI, sid, given, family, photo); return; } catch (InterruptedException | TimeoutException | ExecutionException | NullPointerException ex) { LOG.warn("handleHuaweiAuth", ex); // redirect to the front page httpResp.sendRedirect("/"); return; } } }