質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2277閲覧

認証とセッション(管理)の違いがよく分からないです

murabito

総合スコア108

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2022/06/30 02:54

編集2022/06/30 03:49

JWTについて調べている過程でJWTは認証に使っても良いがセッション管理に使うには注意や考慮すべきことが多く推薦されないと複数の記事で説明がされていました。(ただし、それらの記事では認証とセッション(管理)の違いについての説明はなし)

自分は認証とセッション管理をほぼ同義と今まで認識していたので、これら2つの関係がよくわからなくなってしまいました。

セッション管理は認証を包含するものなのかと思っていたのですが、認証単独で存在し得るということなのでしょうか?

認証はログインの入り口部分で、セッション管理はログイン状態を維持する部分(その他、カートに入れたものを保持するなど)ということなのでしょうか?

そうだったとしたら、例えば、認証サーバーとAPIリソースサーバーが別々にあり、ReactなどでビルドされたフロントエンドWebアプリがあった場合のログインの流れとしては、まずログインフォームから認証サーバーにリクエストを投げて、認証されればJWTトークンがフロントに返されて、それをブラウザーの例えばCookieに保存し、以降、そのトークン情報を添えて、APIリソースサーバーにリクエストを投げることになると思うのですが、これとは別に従来のような方法でログイン時にバックエンドでセッションIDをフロントにかえして、それを使って以降、セッション管理を別途行うということになるのでしょうか?

それなら従来の方法でJWT使わずセッション管理すれば良いように思えてしまいますが、こうする必要があるのは、認証サーバーとAPIサーバーがこの例の場合、分かれているからということになるのでしょうか?

まとまりの悪い質問になってしまっているので、完結に質問内容をまとめますと、以下の2点になります。

  1. 認証とセッション(管理)の違い、もしくは関係性についてご教示頂きたいですm(_ _)m
  2. 文章が斜体で装飾されている部分の自分の認識が合っているのか、間違っているのか、間違っている場合、正しい認識はどういうものなのかをご教示頂きたいですm(_ _)m

修正依頼への対応

質問者さんの言う「セッション管理」の定義を明確にしていただけませんか?

自分の定義が正しいかどうか分からないのですが、自分のイメージでは「セッション管理」とは、「ある一定期間中に発生する同一人物からのリクエストを、バックエンド側が同じユーザーからのリクエストであると判別し続ける仕組み」なのかなと思っています。その仕組を利用してショッピングサイトではカートの中身を保持したり、アクセス解析では同一ユーザーの行動ログをレポートにまとめたりできると思いますが、特に今回の質問の文脈では、この最低限の定義でひとまず十分かなと自分は思いました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2022/06/30 03:20

質問者さんの言う「セッション管理」の定義を明確にしていただけませんか? いろいろな意味で言う人がいるのでそこを明確にしていただかないと話が進みません。 「文章が斜体で装飾されている部分」というのは API, Web, JWT, Cookie のようですが、それが「自分の認識が合っているのか・・・」とか言われても意味がわかりません。
murabito

2022/06/30 03:49

修正依頼ありがとうございます。質問本文に追記いたしました!
guest

回答2

0

ベストアンサー

  1. 認証とセッション(管理)の違い、もしくは関係性についてご教示頂きたいです

自分のイメージでは「セッション管理」とは、「ある一定期間中に発生する同一人物からのリクエストを、バックエンド側が同じユーザーからのリクエストであると判別し続ける仕組み」なのかなと思っています。

ユーザー認証の手段には、Cookie に認証チケットを入れてやり取り、基本認証、Windows 認証、ベアラトークン (JWT 含む)、サーバーにユーザー情報を保持して Cookie をベースにその情報を確認などいろいろありますが、上のような意味であれば「セッション管理」≒「認証」と思ってもよさそうです。

ちなみに、認証・承認というのは、異論はあるかもしれませんが、簡単に言うと以下の通りだと思っています。

認証: あなたは誰?・・・という問いかけに答える。
承認: 何ができるの?・・・という問いかけに答える。

  1. 文章が斜体で装飾されている部分の自分の認識が合っているのか、

何を聞きたいのか不明ですが、JWT を使った認証の流れのことであれば、実装によって違ってくるはずです。

例えば、Visual Studio 2022 のテンプレートで作成する React + Web API + 認証サーバーの場合ですが、認証は Web API で行うようになっており、そのプロセスを簡単に書くと、

(1) ユーザーが React にアクセスすると認証サーバーのログインページに遷移、

(2) ログインページで有効な ID と Password を入力して認証を受ける、

(3) 認証サーバーは応答ヘッダに JWT を含めてブラウザに送信する、

(4) ブラウザは JWT を sessionStorage に格納、

(5) Web API に要求を出す際要求ヘッダに JWT を含めて送信、

(6) Web API で認証されて応答が返ってくる

・・・と言った感じです。

投稿2022/06/30 06:14

編集2022/07/01 22:30
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murabito

2022/06/30 08:03

回答ありがとうございます。自分でも何がわかってないか知識が足りないのでわかっていない状況のようです。知識のある方からすると、意味不明な質問になっていると思われます。。。
murabito

2022/06/30 08:06

上記で記して頂いた一連の流れは認証でもあり、SurferOnWwwさんのセッション管理の定義の範疇でもありますか? JWTトークンは15分とか短い間は有効にするケースが多いと思うのですが、それはある意味、ログイン状態がその間続くということですよね。トークンが有効な間は同じトークンWeb APIにリクエストを送ってレスポンスを受けられる状態が続くことになるので、上記一連の流れはJWTを使ってセッション管理しているケースといえるでしょうか?
退会済みユーザー

退会済みユーザー

2022/06/30 09:41

> SurferOnWwwさんのセッション管理の定義の範疇でもありますか? 私個人が Session から想像するのは認証とは全く関係ないんです。それは自分の守備範囲の ASP.NET の Session がそうだからです。ちなみに、ASP.NET の Session はユーザー固有の情報をサーバーに保存して Session Cookie を発行し、サーバー側ではブラウザから受けた Cookie を使ってその情報を取り出して利用するというものです。 質問者さんが質問に書かれたセッション管理の定義であれば「セッション管理」≒「認証」と思ってもよさそうということです。 > JWTトークンは15分とか短い間は有効にするケースが多いと思うのですが、それはある意味、ログイン状態がその間続くということですよね。 それは単にトークンが有効というだけで、「ログイン状態がその間続く」ということではないと思います。まぁ、それもログイン状態の定義によりますけど。 > 上記一連の流れはJWTを使ってセッション管理しているケースといえるでしょうか? これもやっぱり定義の問題だと思います。「認証に関わるオペレーション」=「セッション管理」と定義すればそうです。
guest

0

セッション管理は認証を包含するものなのかと思っていたのですが

アクセス解析という反例をご自身で提示されている以上、質問者さんの定義でも「包含しない」と思われるため、あとの質問を理解する前提が成立しない状況です。

投稿2022/06/30 03:57

編集2022/06/30 03:58
maisumakun

総合スコア145300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

murabito

2022/06/30 04:08

回答ありがとうございます。アクセス解析はIPアドレスによって、同じユーザーからのリクエストであると判別し続けているのではないですか? ん?認証という意味を自分がちゃんと理解出来ていないのですかね。。。アクセス解析はユーザーとサーバーの合意がなくても、取得したログを解析しているから、そもそも認証していないということになるということでしょうか。。
maisumakun

2022/06/30 04:14

> アクセス解析はIPアドレスによって、同じユーザーからのリクエストであると判別し続けているのではないですか? Cookieでセッションを構築して同一アクセスを管理する、という例もあります。
maisumakun

2022/06/30 06:28 編集

> アクセス解析はユーザーとサーバーの合意がなくても、取得したログを解析しているから、そもそも認証していないということになるということでしょうか。。 いちおう、利用規約に書く、ポップアップさせるなどで、ユーザーは同意している建前になっています。ただし、「認証」とは言い難いです。
murabito

2022/06/30 08:54

ありがとうございます。前提知識、基本知識が不足していて何がわかってないかよくわかっていない状況にいるようです。調べたり実装したりして理解度を上げたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問