ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
IIIF認証API 2.0の動作確認

IIIF認証API 2.0の動作確認

概要 以下のIIIF認証API 2.0の動作確認を行う機会がありましたので、備忘録です。 https://iiif.io/api/auth/2.0/ 以下のようなデモサイトを作成しました。 https://iiif-auth-nextjs.vercel.app/ja リポジトリは以下です。 https://github.com/nakamura196/iiif-auth-nextjs 以下、AIによる説明です。なお、Miradorではうまく動作させることができなかったため、今後の課題です。 概要 本記事では、IIIF Authentication API 2.0 の認証フローを、実際のHTTPリクエスト/レスポンスのレベルで詳細に解説します。各ステップでどのようなリクエストが送信され、どのようなレスポンスが返されるのかを追跡していきます。 アーキテクチャ概要 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ Client │────▶│ IIIF Server │────▶│Auth Service │ │ (Browser) │◀────│ │◀────│ │ └─────────────┘ └─────────────┘ └─────────────┘ 認証フローの詳細 Step 1: 初回の画像情報リクエスト(未認証) リクエスト: GET /api/iiif/image/sample/info.json HTTP/1.1 Host: localhost:3001 Accept: application/json 処理フロー(サーバー側): // app/api/iiif/image/[id]/info.json/route.ts export async function GET(request: NextRequest) { // 1. Authorizationヘッダーを確認 const authHeader = request.headers.get('authorization'); let token = authHeader?.replace('Bearer ', ''); // 2. クエリパラメータもチェック(フォールバック) if (!token) { token = request.nextUrl.searchParams.get('token') || ''; } // 3. トークンの検証 const isValid = token ? await verifyToken(token) : null; // 4. 未認証の場合は401を返す if (!isValid) { return NextResponse.json({ error: 'Authentication required', service: [{ "@context": "http://iiif.io/api/auth/2/context.json", "id": `${request.nextUrl.origin}/api/iiif/probe`, "type": "AuthProbeService2" }] }, { status: 401 }); } } レスポンス: ...

Drupal JSON Web Token Authenticationモジュールを試す

Drupal JSON Web Token Authenticationモジュールを試す

概要 DrupalのJSON Web Token Authenticationモジュールを試してみます。 https://www.drupal.org/project/jwt 以下のページを参考にしました。 https://preston.so/writing/decoupled-drupal-authentication-with-json-web-tokens/ なお、類似するモジュールとして、以下があるようです。 https://www.drupal.org/project/rest_api_authentication 上記モジュールを使ったjwt認証は以下で説明されています。 https://www.drupal.org/docs/contributed-modules/api-authentication/jwt-authentication しかし、以下の記事に記載したように、上記モジュールでjwt認証を使用するには有料プランに加入する必要があるようでした。 そこで、今回は、jwtモジュールのほうを試してみます。 インストールと有効化 jwtモジュール 注意点として、jwtだけでなく、jwt_auth_consumerやjwt_auth_issuerも有効化する必要がありました。 composer.phar require 'drupal/jwt:^2.0' vendor/bin/drush en jwt jwt_auth_consumer jwt_auth_issuer restuiモジュール composer.phar require 'drupal/restui:^1.21' vendor/bin/drush en restui 設定 以下にアクセスして、キーを作成します。 /admin/config/system/keys Key typeとしてJWT HMAC Keyを選択して、JWT AlgorithmとしてSHA-256を選択しました。 次に、以下にアクセスして、JWTの設定を行います。 AlgorithmとしてデフォルトのSHA-256を選択して、Secretとして先ほど作成したキー(ここではjwt)を選択します。 その後、ログインした状態で、以下にアクセスしてみます。 /jwt/token すると、以下のようなトークンが得られます。 参考までに、このトークンをjwt.ioで検証してみます。 https://jwt.io/ PAYLOADの箇所を見てみると、iat(Issued A: トークンが発行された時刻)やDrupalの「User ID」を確認することができます。 RESTリソースの設定 以下にアクセスします。 /admin/config/services/rest ここでは、コンテンツに対して、POSTを有効化し、認証プロバイダとしてjwt_authを選択します。 Postman Postmanを使って、コンテンツの作成を試してみます。 まず、Authorizationを指定せずに、コンテンツの作成試してみます。 Bodyはrawを選択して、フォーマットをJSONとします。以下の最低限のデータで、articleタイプのコンテンツの作成してみます。 { "type": [ { "target_id": "article" } ], "title": [ { "value": "新しい記事のタイトル" } ] } POST先のURLは以下です。 ...

Drupal REST & JSON API Authenticationモジュールの調査

Drupal REST & JSON API Authenticationモジュールの調査

概要 以下の記事を参考に、JWT認証を試してみます。 https://www.drupal.org/docs/contributed-modules/api-authentication/jwt-authentication ただ試してみた結果、JWT認証を行うには、有料プランに加入する必要がありそうで、そこで調査が止まりました。 前提条件: ダウンロードとインストール 以下の2つのモジュールをインストールして有効化します。 https://www.drupal.org/project/rest_api_authentication https://www.drupal.org/project/restui composer.phar require 'drupal/rest_api_authentication:^2.0' composer.phar require 'drupal/restui:^1.21' vendor/bin/drush en rest_api_authentication JWT ベースの API 認証を構成する手順 以下の説明に従って、APIを有効化して、JWTベースのAPI認証をセットアップします。 https://www.drupal.org/docs/contributed-modules/api-authentication/jwt-authentication#s-steps-to-configure-jwt-based-api-authentication しかし、メソッドを選択する場面で、以下に示すように、JWTを選択するには、プレミアムという有料プランに加入する必要がありそうでした。 まとめ 現在調査中のため、情報が不正確かもしれませんが、JWT認証を行うモジュールとして、以下があるようです。 https://www.drupal.org/project/jwt また、OAuth2を使用するモジュールとして、以下があるようです。 https://www.drupal.org/project/simple_oauth 次は、上記の2つのモジュールの使用方法について調査します。

djangoでJWTを使う(djangorestframework-simplejwt)

djangoでJWTを使う(djangorestframework-simplejwt)

概要 djangoでJWTを使おうと思い、djangorestframework-jwtを使ってみました。 https://github.com/jpadilla/django-rest-framework-jwt 以下のサイトなどを参考にすすめてみました。 https://dev-yakuza.posstree.com/django/jwt/ ただし、‘rest_framework_jwt.authentication.JSONWebTokenAuthentication’を記述したところで、以下のエラーが発生しました。 ImportError: cannot import name 'smart_text' from 'django.utils.encoding' 調べたところ、以下の記事が見つかりました。 https://stackoverflow.com/questions/72102911/could-not-import-rest-framework-jwt-authentication-jsonwebtokenauthentication かわりにdjangorestframework-simplejwtを使え、とのことでした。 https://github.com/jazzband/djangorestframework-simplejwt 以下、こちらの使い方についてメモを残します。 djangorestframework-simplejwt 以下のページを参考にすることで、動作確認を行うことができました。 https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html Postman usernameとpasswordを使って、以下にpostします。 http://localhost:8000/api/token/ 結果、refreshとaccessが得られます。 このaccessのほうの値を使用して、HeaderにAuthorizationを設定して送ります。Bearer [jwt]の形式で送ることで、apiを利用できました。 まとめ djangoでJWTを使う際の参考になりましたら幸いです。