トークンによる認証


8

私はjwt.ioと認証に比較的慣れていないため、次のようにJWT.ioを使用しています。

サーバ側

ユーザーがログインしたら、userid内部に埋め込まれたトークンを生成し、メッセージ本文でユーザーに返します

クライアントサイドブラウザー/ JSトークンをlocalStorageに保存し、後続の各リクエストで、トークンをヘッダーに渡します。

Authorization: Basic someEncryptedValue

私も使用しました

X-Auth-Token: someEncryptedValue

これをクッキーに入れてもいいですか?

次に、サーバー側で、トークンをシークレットに対して検証し、有効期限を確認し、トークンからIDを取得して、リクエストを処理します。

このワークフローはすべて正しいですか?


OAuth2のような標準に従わない理由はありますか?ベアラ:ところで:あなたの代わりに認証を使用、基本認証ヘッダーとしてトークンを渡すべきではありません
アルネBurmeister

はい、ベアラーが正しいです。OAuth2は、Google、Facebookなどのサードパーティを介してユーザーを認証することを想定しています。これはユーザーパスワードに対する私自身の認証方式です。私が間違っている場合は、もっと教えてください
user2727195

1
サードパーティの認証はOAuthの1つの機能にすぎず、JWTおよび独自の認証サーバーと完全に連携します
Arne Burmeister 2017年

わかりました。実装しやすい簡単なチュートリアルで教えてください
user2727195

2
アプリケーション間で情報を共有するアプリケーションが必要でない限り、oAuthは必要ありません。認証のような基本的な機能については、Jwtで十分です。
ライヴ

回答:


1

ワークフローは正しく(HTTPSを使用していると想定しています)、はい、トークンを認証ヘッダーに渡すのではなく、Cookieに格納するだけで済みます。

OAuth2の使用はお勧めしません。最も単純なフローを適切に実装すると、ログインプロセスがかなり複雑になります。また、「サーバー側」のパーツはすべて同じドメインに存在するため、必要がないように見えます。

もし私だったらクッキーを使います。よく理解されたスキームに固執することで、混乱の可能性が減り、ブラウザがCookieの送信と更新を処理することを意味します(たとえば、アイドルタイムアウトでセッションを処理する方法を検討してください)


1
XSS攻撃とCSRF攻撃の違いを検討しましたか?Cookieのみを使用すると、XSSスタイルの攻撃よりも悪用しやすいCSRF脆弱性が発生する可能性がありますが、トークンベースの認証は脆弱であるにもかかわらず、悪用するのが困難です。どちらの方法でも、両方のタイプの攻撃から完全に保護するには、リクエストにCookieとヘッダートークンの両方が存在して、ユーザーが認証および承認されていると安全に考える必要があります。
RibaldEddie

@RibaldEddieいいえ、私はしていませんでした-CSRF を防ぐために他のメカニズムが使用されると思いました。あなたがもっと詳細に入ることができる可能性はありますか?トークンベースの認証はまだどのように脆弱ですか?また、両方の方法を使用すると、CSRFからどのように保護されますか?
ジャスティン

暗号化されたトークンパターンは1つのソリューションです。二重送信Cookieも同様です。どちらも、Cookieを使用して認証情報を渡すときに、リクエストとともに送信される別の値が必要です。
RibaldEddie 2017年

0

良い読み物。トークンをローカルストレージに保存し、httpリクエストでJavaScriptを介して送り返すことについて説明しています。

https : //stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage


6
リンクの腐敗を防ぐために、外部のWebサイトにリンクしないでください。記事に有益な情報が含まれている場合は、記事の概要を入力して、ここに投稿してください。
アンディ

1
そこには貴重な情報がたくさんあります。要点の要約はいいでしょう(たとえば、JWT署名を利用したり、Cookieを使用したり、その他のいくつかの手順を実行したりします)。
Berin Loritsch 2017年

0

すべてのブラウザーが、HTTP経由でも安全なダイジェスト認証をサポートするようになりました。正確な要件によっては、これで十分な場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.