オタクくん「ギャル先輩、認証認可ってなんですか?」
認証と認可の違い
オタクくん「ギャル先輩、認証認可ってなんですか?なんか似てるけど違いがよくわからなくて...」
ギャル先輩「またそんな初歩的なこと聞いてんの?てーか、認証と認可って全然違うんだけどwww」
オタクくん「すみません、ちゃんと教えてください...」
ギャル先輩「まぁ、いっか。じゃあ、認証(Authentication)から説明するね。認証ってのは、あんたが誰かを確認すること。ログイン画面でユーザー名とパスワードを入力するでしょ?それが認証よ。」
オタクくん「ああ、なるほど。じゃあ、認可(Authorization)は?」
ギャル先輩「認可ってのは、認証されたユーザーが何をできるかを決めること。例えば、管理者だけがアクセスできるページとか、一般ユーザーには見せない機能とかね。」
オタクくん「そういうことなんですね!ありがとうございます!」
認証の仕組み
オタクくん「もう少し認証の具体的な仕組みを教えてもらえませんか?」
ギャル先輩「しょうがないなぁ、特別に教えてあげるよ。認証には色々な方法があるけど、一般的には次のステップで行うの。」
ギャル先輩「まず、ユーザーがログインフォームでユーザー名とパスワードを入力する。次に、それをサーバー側で受け取って、データベースに保存されているハッシュ化されたパスワードと比較するの。」
オタクくん「ハッシュ化?」
ギャル先輩「そうそう。パスワードはそのまま保存しちゃダメだから、ハッシュ関数を使って変換するの。例えば、SHA-256とか。」
オタクくん「わかりました。コードで示してもらえますか?」
ギャル先輩「いいよ。簡単な例を見せるね。」
import hashlib
def hash_password(password):
return hashlib.sha256(password.encode()).hexdigest()
# パスワードをハッシュ化する
password = "my_secure_password"
hashed_password = hash_password(password)
print(hashed_password)
オタクくん「なるほど、こんな感じでハッシュ化するんですね。」
ギャル先輩「そうそう。で、ログイン時にはユーザーが入力したパスワードを同じ方法でハッシュ化して、データベースに保存されているハッシュと比較するの。」
認可の仕組み
オタクくん「認可の具体的な仕組みも教えてもらえますか?」
ギャル先輩「もちろん。認可には役割ベースのアクセス制御(RBAC)がよく使われるの。つまり、ユーザーに役割(Role)を割り当てて、その役割に応じてアクセスできるリソースを制御する方法。」
オタクくん「なるほど、具体的にはどうやって実装するんですか?」
ギャル先輩「じゃあ、簡単な例を見せるね。」
class User:
def __init__(self, username, role):
self.username = username
self.role = role
class Resource:
def __init__(self, name, allowed_roles):
self.name = name
self.allowed_roles = allowed_roles
def can_access(user, resource):
return user.role in resource.allowed_roles
# ユーザーとリソースの定義
user = User("otaku_kun", "admin")
resource = Resource("admin_page", ["admin"])
# アクセス制御の確認
if can_access(user, resource):
print("アクセス許可")
else:
print("アクセス拒否")
オタクくん「これで、管理者だけがアクセスできるページを制御するんですね!」
ギャル先輩「そういうこと。簡単でしょ?」
オタクくん「ギャル先輩、認証と認可の違いと仕組みがよくわかりました。ありがとうございます!」
ギャル先輩「わかったならいいんだけど、次はもっと難しいこと聞いてこないでよwww」
オタクくん「わかりました。でも、ギャル先輩に教えてもらうとすごくわかりやすいです!」
ギャル先輩「そりゃあ、あーしが天才だからねwww」
オタクくん「いや、本当に感謝してます!」
ギャル先輩「ふふ、そんなに感謝されると照れるじゃん?」
ギャル先輩「ほら、次の質問があるなら早く言いなよ!」
オタクくん「えっと、じゃあ次はセキュリティトークンについて教えてください!」
ギャル先輩「OK、それじゃあ次回はトークンについて話そうか。期待して待ってなwww」
Discussion