🔖

オタクくん「ギャル先輩、認証認可ってなんですか?」

2024/06/02に公開

認証と認可の違い

オタクくん「ギャル先輩、認証認可ってなんですか?なんか似てるけど違いがよくわからなくて...」

ギャル先輩「またそんな初歩的なこと聞いてんの?てーか、認証と認可って全然違うんだけど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