亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目次
1. 基本知識
1.1 同一生成元ポリシー" >1.1 同一生成元ポリシー
1.2 セッション メカニズム" >1.2 セッション メカニズム
2. シングル サインオン
1. 同じ親ドメイン SSO" >1. 同じ親ドメイン SSO
2. クロスドメイン SSO" >2. クロスドメイン SSO
2.1.1 タグを使用してドメイン間で Cookie を書き込む (jsonp)
2.2 跨域讀cookie
2.2.1 利用標(biāo)簽跨域讀cookie(jsonp)
3. nodejs實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)實(shí)戰(zhàn)
ホームページ ウェブフロントエンド jsチュートリアル シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

Feb 24, 2023 pm 07:33 PM
nodejs node シングルサインオンシステム

シングル サインオン システムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?次の記事ではnodeを使ってシングルサインオンシステムを?qū)g現(xiàn)する方法を紹介しますので、參考になれば幸いです。

シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

シングルサインオン SSO(シングルサインオン)とは、複數(shù)の業(yè)務(wù)システムのログイン機(jī)能を分離し、新たなシステムを構(gòu)築することで、一度ログインすれば業(yè)務(wù)システムにログインする必要がなくなります。

1. 基本知識

1.1 同一生成元ポリシー

ソース = プロトコルドメイン名ポート

http://www.a.com を例に挙げます:

  • https://www.a.com ?(異なるプロトコル)
  • http://www.b.com ?(ドメイン名が異なります)
  • http://www.a.com:3000 ?(ポートが異なります)

同一生成元ポリシーのブラウジング アプリケーション配下のリソースにこのアプリケーションのみがアクセスできるようにすることでセキュリティを確保するサーバーの動作。

1.2 セッション メカニズム

http プロトコルは ステートレス プロトコルであるため、(クライアントとサーバー間のデータ交換は接続は閉じられ、次回リクエストが行われたときに接続が再確立されます)、ただし、パスワードを記憶するなどの機(jī)能を?qū)g行する必要がある場合、セッションを記録する必要があることは明らかです。 [関連チュートリアルの推奨事項(xiàng): nodejs ビデオ チュートリアル ]

一般的に使用されるセッション トラッキングは Cookie とセッションです。簡単に理解すると、キーと値を保存できるデータ構(gòu)造です。違いは次のとおりです。 Cookie はクライアントに保存されます。サーバー側(cè)では、セッションはサーバー側(cè)に保存されます。

2. シングル サインオン

1. 同じ親ドメイン SSO

同じ親ドメイン (例: www.app1.aaa.com、www.app2.aaa.com これら 2 つのサーバーは、.aaa.com の親ドメイン名です。
デフォルトでは、2 つのサーバー上のページ間の Cookie は相互にアクセスできません。

しかし、Cookie のドメイン屬性を共通の親ドメイン名に設(shè)定して、2 つのサーバー上のページ間の Cookie に相互にアクセスできるようにすることができます。

router.get('/createCookie',?async?(ctx,?next)?=>?{
??ctx.cookies.set('username',?'123',?{
????maxAge:?60?*?60?*?1000,
????httpOnly:?false,
????path:?'/',
????domain:'.a.com'?//設(shè)置domain為共通的父域名
??});
??ctx.body?=?"create?cookie?ok"})router.get('/getCookie',?async?(ctx,?next)?=>?{
??let?username=ctx.cookies.get('username')
??if?(username){
????ctx.body=username??}else{
????ctx.body='no?cookie'
??}})

シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

2. クロスドメイン SSO

ドメイン名が www の場合。 .com、www.b.com、どのようにドメインを設(shè)定しても役に立ちません。

次に、すべてのドメインの Cookie に ID 資格情報 (トークン) を書き込む方法を見つける必要があります。

2.1 ドメイン間での Cookie の書き込み
http://www.a.com/index.js の https://www.c.com:3000/sso にネットワーク リクエストを直接送信すると、クロスドメイン Cookie を書き込むことができません。

??<script>
    $.ajax({
      url: &#39;https://www.c.com:3000/sso?key=username&value=123&#39;,
      method: &#39;get&#39;,
    })
  </script>
ただし、<script></script> タグを使用してクロスドメイン リクエストを開始し、Cookie を書き込むこともできます

<script></script>
または、jquery jsonp を使用してクロスドメイン リクエストを開始し、Cookie を書き込むこともできます。このメソッドの原理は、 タグを使用してドメイン間で実裝することもできます。

?$.ajax({
??????url:?'https://www.c.com:3000/sso?key=username&value=123',
??????method:?'get',
??????dataType:'jsonp'
????})
このように、 タグを通じて、www.c.com のドメインを持つクロスドメイン Cookie が www.a.com.


に書き込まれます。 シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか? バックエンド

const?options?=?{
??key:?fs.readFileSync(path.join(__dirname,?'./https/privatekey.pem')),
??cert:?fs.readFileSync(path.join(__dirname,?'./https/certificate.pem')),
??secureOptions:?'TLSv1_2_method'?//force?TLS?version?1.2}var?server?=?https.createServer(options,app.callback());??//只能使用https協(xié)議寫cookierouter.get('/sso',?async?(ctx,?next)?=>?{
??let?{
????key,?value??}?=?ctx.request.query
??ctx.cookies.set(key,?value,?{
????maxAge:?60?*?60?*?1000,?//有效時間,單位毫秒
????httpOnly:?false,?//表示?cookie?是否僅通過?HTTP(S)?發(fā)送,,?且不提供給客戶端?JavaScript?(默認(rèn)為?true).
????path:?'/',
????sameSite:?'none',?//限制第三方?Cookie
????secure:?true?//cookie是否僅通過?HTTPS?發(fā)送
??});
??ctx.body?=?'create?Cookie?ok'})

注:

  • ブラウザは Cookie を書き込めず、エラーを報告しました

    彼の設(shè)定した Cookie はhttp-only のためブロックされました http-only: Cookie が HTTP(S) 経由でのみ送信され、クライアント JavaScript に提供されないかどうかを示します (デフォルトは true)。
    したがって、httpOnly を false に設(shè)定します。 .

  • ブラウザは Cookie を書き込めず、エラーを報告しました

    この set-Cookie はユーザー設(shè)定によりブロックされました これは本當(dāng)に落とし穴です。ブラウザをシークレット モードで開きました。ただし、Chrome ブラウザではデフォルトでシークレット モードのサードパーティ Cookie が無効になっています。すべての Cookie を許可するように変更してください。

    シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

  • ブラウザは Cookie を書き込まず、エラーを報告します

    SameSite 屬性があるが Secure が設(shè)定されていないため、この設(shè)定された Cookie はブロックされました SameSite 屬性と Secure 屬性を設(shè)定する必要があります

  • ##ブラウザが Cookie を書き込まず、エラーを報告する
  • サーバー エラー エラー: 暗號化されていない接続で安全な Cookie を送信できません

    これは、Cookie を書き込むための koa フレームワークの制限だと思います。 https による Cookie の書き込みのみをサポートできるため、www.c.com を https サーバーに変更しました。ドメイン

    上記の jsonp メソッドは、Chrome ブラウザで完全に実行されます。ただし、IE ブラウザは Cookie に対してより厳密であるため、上記のメソッドを使用して Cookie を書き込むことができません。解決策は、p3p 応答ヘッダーを追加することです。 。
router.get('/sso',?async?(ctx,?next)?=>?{
??let?{
????key,?value??}?=?ctx.request.query
??ctx.cookies.set(key,?value,?{
????maxAge:?60?*?60?*?1000,?//有效時間,單位毫秒
????httpOnly:?false,
????path:?'/',
????sameSite:?'none',
????secure:?true
??});
??ctx.set("P3P",?"CP='CURa?ADMa?DEVa?PSAo?PSDo?OUR?BUS?UNI?PUR?INT?DEM?STA?PRE?COM?NAV?OTC?NOI?DSP?COR'")?//p3p響應(yīng)頭
??ctx.body?=?'create?Cookie?ok'})
2.1.3 クロスドメイン情報転送を?qū)g現(xiàn)するための URL パラメーター
http://www.c.com:3000/createToken?from=http にアクセスしてください。 // www.a.com/createCookie

www.c.com上生成token后將url重寫,帶上token,重定向到www.a.com

router.get('/createToken',?async?(ctx,?next)?=>?{
??let?{?from?}?=?ctx.request.query??let?token?=?"123";
??ctx.response.redirect(`${from}?token=${token}`)})

www.a.com上從url上獲取token,存入cookie

router.get('/createCookie',?async?(ctx,?next)?=>?{
??let?{?token?}?=?ctx.request.query
??ctx.cookies.set('token',?token,?{
????maxAge:?60?*?60?*?1000,?//有效時間,單位毫秒
????httpOnly:?false,
????path:?'/',
??});
??ctx.body?=?'set?cookie?ok'})

這樣就實(shí)現(xiàn)了跨域信息的傳遞.與上面的方式不同,這種方法只是單純的http請求,適用于所有瀏覽器,但是缺點(diǎn)也很明顯,每次只能分享給一個服務(wù)器。
シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

2.2 跨域讀cookie
2.2.1 利用標(biāo)簽跨域讀cookie(jsonp)

之前2.1.1利用標(biāo)簽在www.a.com中寫入了www.c.com的cookie(username,123),現(xiàn)在想要www.a.com請求的時候攜帶上www.c.com的cookie,也就是說要跨域讀cookie.

其實(shí)也是同樣的方法,在www.a.com上利用跨域訪問訪問www.c.com,會自動的帶上domain為www.c.com的cookie。
www.a.com/index.js

<script></script>

www.c.com

router.get('/readCookie',?async?(ctx,?next)?=>?{
??let?username?=?ctx.cookies.get('username')
??console.log('cookie',?username)})

シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?
可以看到讀取到了存儲在www.a.com里面domain為www.c.com的cookie.

3. nodejs實(shí)現(xiàn)單點(diǎn)登錄系統(tǒng)實(shí)戰(zhàn)

シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?
效果如圖所示:

  • 第一次訪問www.a.com首頁

  • 跳轉(zhuǎn)到www.c.com:3000登錄頁面,登錄成功后跳轉(zhuǎn)www.a.com首頁

  • 再次訪問www.a.com首頁,無需登錄直接跳轉(zhuǎn)

  • 訪問www.b.com首頁,無需登錄直接跳轉(zhuǎn)

源碼: https://github.com/wantao666/sso-nodejs

詳細(xì)設(shè)計:
シングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?

更多node相關(guān)知識,請訪問:nodejs 教程!

以上がシングルサインオンシステムとは何ですか? Nodejsを使用して実裝するにはどうすればよいですか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Nodejs インストール ディレクトリ內(nèi)の npm ファイルと npm.cmd ファイルの違いは何ですか? Nodejs インストール ディレクトリ內(nèi)の npm ファイルと npm.cmd ファイルの違いは何ですか? Apr 21, 2024 am 05:18 AM

Node.js インストール ディレクトリには、npm と npm.cmd という 2 つの npm 関連ファイルがあります。違いは次のとおりです。拡張子が異なります。npm は実行可能ファイルで、npm.cmd はコマンド ウィンドウのショートカットです。 Windows ユーザー: npm.cmd はコマンド プロンプトから使用できますが、npm はコマンド ラインからのみ実行できます。互換性: npm.cmd は Windows システムに固有ですが、npm はクロスプラットフォームで使用できます。使用上の推奨事項(xiàng): Windows ユーザーは npm.cmd を使用し、他のオペレーティング システムは npm を使用します。

PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? PIノードティーチング:PIノードとは何ですか? PIノードをインストールしてセットアップする方法は? Mar 05, 2025 pm 05:57 PM

ピン張りのノードの詳細(xì)な説明とインストールガイドこの記事では、ピネットワークのエコシステムを詳細(xì)に紹介します - PIノードは、ピン系生態(tài)系における重要な役割であり、設(shè)置と構(gòu)成の完全な手順を提供します。 Pinetworkブロックチェーンテストネットワークの発売後、PIノードは多くの先駆者の重要な部分になり、テストに積極的に參加し、今後のメインネットワークリリースの準(zhǔn)備をしています。まだピン張りのものがわからない場合は、ピコインとは何かを參照してください。リストの価格はいくらですか? PIの使用、マイニング、セキュリティ分析。パインワークとは何ですか?ピン競技プロジェクトは2019年に開始され、獨(dú)占的な暗號通貨PIコインを所有しています。このプロジェクトは、誰もが參加できるものを作成することを目指しています

Nodejs はバックエンド フレームワークですか? Nodejs はバックエンド フレームワークですか? Apr 21, 2024 am 05:09 AM

Node.js は、高いパフォーマンス、スケーラビリティ、クロスプラットフォーム サポート、豊富なエコシステム、開発の容易さなどの機(jī)能を備えているため、バックエンド フレームワークとして使用できます。

Nodejsはフロントエンドを書くことができますか? Nodejsはフロントエンドを書くことができますか? Apr 21, 2024 am 05:00 AM

はい、Node.js はフロントエンド開発に使用でき、主な利點(diǎn)には、高性能、豊富なエコシステム、クロスプラットフォーム互換性が含まれます??紤]すべき點(diǎn)は、學(xué)習(xí)曲線、ツールのサポート、コミュニティの規(guī)模の小ささです。

Nodejsのグローバル変數(shù)とは何ですか Nodejsのグローバル変數(shù)とは何ですか Apr 21, 2024 am 04:54 AM

Node.js には次のグローバル変數(shù)が存在します。 グローバル オブジェクト: グローバル コア モジュール: プロセス、コンソール、require ランタイム環(huán)境変數(shù): __dirname、__filename、__line、__column 定數(shù): unknown、null、NaN、Infinity、-Infinity

Nodejs はバックエンド開発言語ですか? Nodejs はバックエンド開発言語ですか? Apr 21, 2024 am 05:09 AM

はい、Node.js はバックエンド開発言語です。これは、サーバー側(cè)のビジネス ロジックの処理、データベース接続の管理、API の提供などのバックエンド開発に使用されます。

Nodejsをmysqlデータベースに接続する方法 Nodejsをmysqlデータベースに接続する方法 Apr 21, 2024 am 06:13 AM

MySQL データベースに接続するには、次の手順に従う必要があります。 mysql2 ドライバーをインストールします。 mysql2.createConnection() を使用して、ホスト アドレス、ポート、ユーザー名、パスワード、データベース名を含む接続オブジェクトを作成します。 connection.query() を使用してクエリを?qū)g行します。最後に connection.end() を使用して接続を終了します。

Nodejs はどのようなプロジェクトに適していますか? Nodejs はどのようなプロジェクトに適していますか? Apr 21, 2024 am 05:45 AM

Node.js は、次のプロジェクト タイプに適しています。 ネットワークおよびサーバー アプリケーション イベント駆動型アプリケーション リアルタイム アプリケーション データ集約型アプリケーション コマンドライン ツールとスクリプト 軽量マイクロサービス

See all articles