1日1スキル: 分散システム向けの低コストの権限検証メカニズム

1日1スキル: 分散システム向けの低コストの権限検証メカニズム

Weiwen Codeをよくフォローしている人は、私がニュースWebページのテキストを自動的に抽出できるGNE[1]と呼ばれるオープンソースプロジェクトを作成したことをご存知でしょう。その効果は、市場にある他のオープンソースのニュース抽出ツールよりもはるかに優れています。

GNE には GnePro と呼ばれる高度なバージョンもあることをご存知ないかもしれません。 URLを入力するとニュースのテキストを自動的に抽出することができ、GNEよりも多くのフィールドを抽出します。 8 か国 130,000 の Web サイトでテストされ、認識精度は 100% です。

GnePro は、K8S を使用して構築されたクローラー クラスターです。背後には数十台のサーバーがあり、ゲートウェイを通じて負荷分散が行われます。 GnePro の権限メカニズムを設計する際には、できるだけシンプルにして、サードパーティのコンポーネントに依存しないようにしたいと考えています。

従来の権限検証メカニズムは一般的に次のようになります: ユーザーがログインすると、Cookie に SessionId が存在します。ユーザーがデータを照会する場合、バックエンドへのリクエストが開始されます。バックエンドはリクエストから SessionId を取得し、Redis またはその他のデータベース内のユーザーのセッションを照会します。セッションには、ユーザーのログイン情報や権限情報などが保存されます。次に、この権限情報に基づいて、ユーザーが権限を持つコンテンツを返します。

ただし、この方法では、Redis などのデータベースを追加で導入する必要があります。そうすると、データの同期、同時実行の競合などの問題に直面することになります。

私のニーズはシンプルです。ユーザーのアカウントの有効期限がいつ切れるか、またそのユーザーがどのレベルにいるのかを知る必要があります。 V1 レベルでは、ニュースのテキスト、タイトル、リリース時間、作成者、画像のみを返すことができます。 V2 は V1 に基づいて、パンくずリスト、SEO データ、Web ページ タグを返すこともでき、JavaScript レンダリングもサポートします。 V3 は、Web ページ本体のクリーンなソース コードを返すこともでき、ユーザーが解析用に HTML をアップロードすることもサポートします。したがって、Session を使用する代わりに、JWT を使用して実装します。

この場合、JWT の使用が非常に適しています。 JWT ではサードパーティ コンポーネントの導入は必要ありません。どのサーバーでも独立して権限検証を実行できます。

たとえば、ユーザーの現在のレベルと認証の有効期限を示すデータ構造を定義します。

 user_info = { 'level': 'v2', 'expire': '2023-12-01 00:00:00', 'name': '青南' }

Python では、PyJWT を使用して JWT トークンを簡単に生成できます。まず、pip を使用して PyJWT をインストールします。

 python3 -m pip install pyjwt

次に、3 行のコードでトークンを生成します。

 import jwt user_info = { 'level': 'v1', 'expire': '2023-12-01 00:00:00', 'name': '青南' } password = '青南工资9999999999' token = jwt.encode(user_info, password, algorithm='HS256') print(token)

次の図に示すように:

写真

クローラーを頻繁に書く生徒は、eyJh で始まる文字列に馴染みがあるかもしれません。多くのウェブサイトでは、ヘッダーにこのようなトークンが含まれています。

ユーザーがメンバーシップを再チャージすると、トークンを生成してユーザーに送信します。 GnePro を使用してリクエストを行う場合、このトークンをヘッダーに配置するだけです。

バックエンドがリクエストを受信した後、現在どのサーバー上にあるかに関係なく、ユーザーの権限情報を解析するには次のコード行を実行するだけです。

 import jwt token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsZXZlbCI6InYxIiwiZXhwaXJlIjoiMjAyMy0xMi0wMSAwMDowMDowMCIsIm5hbWUiOiJcdTk3NTJcdTUzNTcifQ.8xEkWL1pbtHKMXjrVsTtiY4JZnSMf--ufK3fiDp67SY' password = '青南工资9999999999' user_info = jwt.decode(token, password, algorithms=['HS256']) print(user_info)

実行効果は以下の図に示されています。

写真

このJWTトークンはパスワードのように長い文字列のように見えますが、実際には次の図に示すように、Jwt.io[2] Webサイトを直接使用して解析できることに注意してください。

写真

JWT トークンを解析するためにパスワードは必要ありません。ただし、JWT トークンを生成/変更するにはパスワードが必要です。パスワードが間違っている場合は、別の JWT トークンが生成されます。

写真

このトークンは先ほど生成したものと非常に似ていますが、パスワードが間違っているため、検証するとエラーが報告されます。

写真

したがって、このトークンを生成した後、ユーザーがレベルを v3 に変更することを心配する必要はありません。彼は私のパスワードを持っていないので、彼が生成したトークンはここでの検証に合格できません。トークンが改ざんされたかどうかを知ることができます。

検証プロセス全体に必要なのは数行のコードのみで、サードパーティのコンポーネントは必要ありません。少ないほど良いという原則にぴったりです。

もちろん、JWT はセッションを完全に置き換えることはできません。セッションはユーザーの権限と動作をリアルタイムで制御できるためです。たとえば、Web サイトでシングル サインオンを実装する場合、ユーザーがブラウザー A からログインすると、ブラウザー B から自動的にログアウトされます。この機能は、JWT のみを使用して実現することはできません。

JWT 情報に SessionId を追加すればいいのでは、と言う人もいるかもしれません。バックエンドが SessionId に対応する情報を読み取ると、さらに多くの操作を実行できるようになります。

しかし、これを行うことと、SessionId を Cookies に直接配置することの違いは何でしょうか? JWT はもともと軽量な権限検証に使用されます。独自のシーンがあります。セッションである必要はありません。 JWT をセッションとして使用しないでください。

参考文献

[1]GNE: https://github.com/GeneralNewsExtractor/GeneralNewsExtractor

<<:  コンテナオペレーターが知っておくべき Kubernetes (K8s) クラスターの 10 個の一般的な API リソースオブジェクト

>>:  エッジとクラウド、あるいはエッジとクラウド: 今後の方向性は?

推薦する

成功するオンラインプロモーション記事の書き方

パスカルは人間は考える葦であると言った。これは、人間の尊さと価値を強調する儒教の「人間本位」の考えと...

マルチクラウド戦略に関する5つのよくある質問: ワークロードごとの最適化の必要性

イノベーションが継続的に進む今日の世界では、企業は増大するビジネス ニーズを満たすためにさまざまな ...

sered: 希少なスペイン語クラスターサーバー、70 IP、月額 12.95 ユーロ、スペイン語クラスター VPS (最大 200 IP)

2009年に設立されたスペインの商人であるseredは、主にスペインの仮想ホスティング(クラスターホ...

大容量ハードディスク VPS: Ftpit - 年間 35 ドル / メモリ 1g / コア 3 個 / ハードディスク 100g / トラフィック 2T / G ポート / ロサンゼルス

大容量ハードドライブ搭載のVPS、Ftpitをご紹介します。大容量ハードドライブ搭載のbackups...

WeChatマーケティングの5つの強力な機能

2012年の新メディア、WeChat!インターネット、特にモバイルインターネットを利用する人にとって...

ページ速度を利用してウェブサイトのパフォーマンスを最適化する方法(パート 1)

SEOウェブサイト最適化において、ウェブサイトのパフォーマンスは実は検索エンジンに大きな影響を与えま...

雲西がデジタルミドルプラットフォーム3.0をリリース、内部ミドルプラットフォームの運用能力を突破

従来の企業はデータ サイロに直面する必要があります。店舗数や会員数が増えるにつれ、顧客管理の課題を技...

1品1コードが新たなマーケティングトレンドに。超低コストでビッグデータ運用帝国を築くことも可能

月収10万元の起業の夢を実現するミニプログラム起業支援プラン私の上司は最近レッドブルを買うのが好きな...

生成AIにおける新たな高収入の仕事

クラウドプロバイダーのサービスの需要は2024年まで増加すると予測しています。また、 AI生成技術の...

tothostはどうですか?ベトナム VNPT ライン 無制限トラフィック VPS レビュー

tothostはどうですか? tothost ベトナム VPN ラインはいかがですか?ベトナムのVP...

Baidu のオープンデータ プラットフォームを使用してユーザー エクスペリエンスとブランド価値を向上

おそらく、まだ多くの人が百度オープンプラットフォームの概念を知らないでしょう。百度データオープンプラ...

2013 年にウェブマスターは外部リンクをどのように公開すべきでしょうか?

2012 年が過ぎました。SEO 業界の皆さん、まだ不安を感じていますか? 医療 Web サイトの ...

世界で最も安い苦情防止マシン:VPS年間支払い6ユーロ、デュアルコアE5専用サーバー37ユーロ

ルーマニアのホスティングプロバイダーであるhostsolutionsがまたトラブルを起こしている。こ...

inxy: アカウントを登録して Black 5 抽選に参加して 300 ドルを獲得しましょう。CDN トラフィックは 1 トンあたり 4 ドルから

これから、inxy は興味深いブラックフライデー イベントを開始します。抽選で最大 300 ドル相当...