shuhei-fujita / playground-mysql

0 stars 0 forks source link

認証と認可の実装 #3

Open shuhei-fujita opened 8 months ago

shuhei-fujita commented 8 months ago

認証(Authentication)

ユーザーが自分が主張する人物であることをシステムが確認するプロセスです。これは通常、ユーザー名とパスワード、二要素認証、生体認証などを使用して行われます。

認可(Authorization)

認証されたユーザーがアクセスしたり操作したりすることが許可されているシステムのリソースや機能を定義するプロセスです。認可では、ユーザーがどのリソースにアクセスできるか、どの操作を実行できるかが決定されます。

ex) APIとデータベース(DB)に関して

sequenceDiagram
    participant Browser as Webブラウザ
    participant APIServer as APIサーバー
    participant DBServer as DBサーバー

    Note over Browser,APIServer: ユーザーがログインページにアクセス
    Browser->>APIServer: ユーザー名とパスワードを送信
    APIServer->>DBServer: ユーザー情報の確認を要求
    DBServer-->>APIServer: ユーザー情報を確認し、認証結果を返す
    APIServer-->>Browser: 認証トークンを発行し、送信

    Note over Browser,APIServer: ユーザーが保護されたリソースにアクセス
    Browser->>APIServer: 認証トークンとリソースへのアクセス要求を送信
    APIServer->>DBServer: ユーザーの権限と認証トークンを検証
    DBServer-->>APIServer: 権限確認結果を返す
    APIServer->>DBServer: リソースへのアクセス要求を実行
    DBServer-->>APIServer: 要求されたリソースデータを返す
    APIServer-->>Browser: リソースデータを送信

https://chat.openai.com/c/ffe54e82-3076-4ab7-acd9-6205833e08ff

shuhei-fujita commented 8 months ago

JWTを使用した認証フロー

sequenceDiagram
    participant Browser as Webブラウザ
    participant APIServer as APIサーバー
    participant DBServer as DBサーバー

    Note over Browser,APIServer: ユーザーがログインを試みる
    Browser->>APIServer: ユーザー名とパスワードを送信
    APIServer->>DBServer: ユーザー認証の確認
    DBServer-->>APIServer: ユーザー情報の確認結果
    APIServer->>APIServer: JWT生成
    APIServer-->>Browser: JWTを返す

    Note over Browser,APIServer: ユーザーがJWTを利用してリソースにアクセス
    Browser->>APIServer: JWTと共にリソースへのアクセス要求
    APIServer->>APIServer: JWTの検証
    alt JWTが有効
        APIServer->>DBServer: リソースへのアクセス要求
        DBServer-->>APIServer: リソースデータ
        APIServer-->>Browser: リソースデータを返す
    else JWTが無効
        APIServer-->>Browser: エラーメッセージを返す
    end

OAuth2を使用した認可フロー

sequenceDiagram
    participant Browser as Webブラウザ
    participant APIServer as APIサーバー
    participant AuthServer as 認証サーバー
    participant ResourceServer as リソースサーバー

    Note over Browser,AuthServer: ユーザーがサービスにログインを試みる
    Browser->>APIServer: ログイン要求
    APIServer->>Browser: OAuth2認証ページリダイレクトURLを返す

    Browser->>AuthServer: リダイレクトされた認証要求
    AuthServer->>Browser: 認証とアプリケーションへのアクセス許可要求
    Browser->>AuthServer: ユーザー認証とアクセス許可
    AuthServer-->>Browser: 認可コードを返す

    Browser->>APIServer: 認可コードを送信
    APIServer->>AuthServer: 認可コードとクライアント情報を使ってアクセストークンを要求
    AuthServer-->>APIServer: アクセストークンとリフレッシュトークンを発行

    Note over APIServer,ResourceServer: リソースアクセスのためにアクセストークンを使用
    APIServer->>ResourceServer: アクセストークンを利用してリソースへのアクセス要求
    ResourceServer->>ResourceServer: アクセストークンの検証
    alt アクセストークンが有効
        ResourceServer-->>APIServer: リソースデータを返す
    else アクセストークンが無効
        ResourceServer-->>APIServer: エラーメッセージを返す
    end
    APIServer-->>Browser: リソースデータまたはエラーメッセージを返す