iiif auth apiを試す
概要
iiif auth apiを試すため環境として、以下のリポジトリが提供されています。
今回は、上記のリポジトリを使用して、iiif auth apiを試します。
起動
準備
git clone https://github.com/digirati-co-uk/iiif-auth-server
cd iiif-auth-server
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
pip install -r requirements.txt
時にバージョンの不具合などが発生した場合、以下のように、バージョン情報を削除して、再度試すなどしてみてください。
argparse
Flask
iiif2
itsdangerous
Jinja2
MarkupSafe
pbr
Pillow
six
stevedore
Werkzeug
db作成
その後、dbを作成します。
export FLASK_APP=iiifauth
export FLASK_DEBUG=true
flask initdb
上記を実行後、iiif-auth-server/iiifauth
にiiifauth.db
というファイルが作成されます。
dbの中身は、以下のようなツールを使って確認することができます。
起動
以下を実行します。
flask run
その後、http://127.0.0.1:5000
にアクセスすると、以下の画面が表示されます。
ビューアの準備
以下を実行して、mirador3をダウンロードして、ローカルサーバで起動してみます。
wget https://mirador.cultural.jp
python -m http.server
http://0.0.0.0:8000
にアクセスして、以下の画面が表示されればOKです。
ビューアに読み込ませる
http://127.0.0.1:5000
のページの構成は、まずImagesが並び、その後Manifestsが並びます。
今回、下部のManifestsを、Mirador3で読み込んでみます。
わかりやすい例として、02のdegradedを試してみます。
以下のようなURLにアクセスしてみます。
http://0.0.0.0:8000/?manifest=http://0.0.0.0:5000/manifest/02_degraded
すると、以下のように表示されます。特徴として、画面上部にログインのための帯が表示され、色がついていない画像が表示されます。
そこで、ログインをしてみます。以下のようなログイン画面が起動するため、Loginボタンを押します。
そうすると、以下のように、画面上部がLog outボタンに変わり、カラーの画像が表示されます。
上記が、iiif auth apiの利用例のひとつです。
以下、小さくて見にくいと思いますが、先に紹介したDB Browser for SQLiteでiiifauth.db
を開いて表示したものです。session_id
やtoken
などが保存されていることが確認できます。
info.jsonを概観する
上記の例のinfo.jsonは以下です。
service
の箇所に記載された文字列が、ビューア上で表示されていたことが確認できます。
{
"@context": "http://iiif.io/api/image/2/context.json",
"@id": "http://0.0.0.0:5000/img/02_gauguin_degraded.jpg",
"height": 2506,
"profile": [
"http://iiif.io/api/image/2/level2.json"
],
"protocol": "http://iiif.io/api/image",
"service": {
"@context": "http://iiif.io/api/auth/1/context.json",
"@id": "http://0.0.0.0:5000/auth/cookie/login/02_gauguin.jpg",
"confirmLabel": "Login",
"description": "Example Institution requires that you log in with your example account to view the full-quality content.",
"failureDescription": "You don't appear to have access to the full colour version. <a href=\"http://example.org/policy\">Access Policy</a>",
"failureHeader": "Viewing greyscale version",
"header": "Please Log In",
"label": "Login to Example Institution for full quality",
"profile": "http://iiif.io/api/auth/1/login",
"service": [
{
"@id": "http://0.0.0.0:5000/auth/token/login/02_gauguin.jpg",
"profile": "http://iiif.io/api/auth/1/token"
},
{
"@id": "http://0.0.0.0:5000/auth/logout/login/02_gauguin.jpg",
"label": "log out",
"profile": "http://iiif.io/api/auth/1/logout"
}
]
},
"tiles": [
{
"scaleFactors": [
1,
2,
4,
8,
16
],
"width": 256
}
],
"width": 3176
}
さらに、service
> service
のところで、以下のような記載があります。ここで、ログアウト時などに必要な情報が記載されています。
"service": [
{
"@id": "http://0.0.0.0:5000/auth/token/login/02_gauguin.jpg",
"profile": "http://iiif.io/api/auth/1/token"
},
{
"@id": "http://0.0.0.0:5000/auth/logout/login/02_gauguin.jpg",
"label": "log out",
"profile": "http://iiif.io/api/auth/1/logout"
}
]
これまで、以下のようなURLが登場しています。
- http://0.0.0.0:5000/auth/cookie/login/02_gauguin.jpg
- http://0.0.0.0:5000/auth/token/login/02_gauguin.jpg
- http://0.0.0.0:5000/auth/logout/login/02_gauguin.jpg
上記の処理内容については、iiifauth/iiif_auth_server.py
に記載されています。
例えばログアウトについては、以下のようになっており、tokensテーブルから当該レコードを削除していることが確認できます。
@app.route('/auth/logout/<pattern>/<identifier>')
def logout_service(pattern, identifier):
"""Log out service"""
service_id = get_service_id(pattern, identifier)
session.pop('service_id')
database = get_db()
database.execute('delete from tokens where session_id=? and service_id=?',
[get_session_id(), service_id])
database.commit()
return "You are now logged out"
上記のような箇所を参考にして、各機関の環境に応じた実装を行うのがよいように思います。
なお、ログインが成功・失敗時の個々の処理内容は、以下に記載されていました。
{
"comment" : "This is neither IIIF nor JSON-LD, even though it contains fragments of IIIF. Its purpose is configuration the demo",
"01_Icarus_Breughel.jpg" : {
"label": "Standard login",
"auth_services" : [
{
"profile": "http://iiif.io/api/auth/1/login",
"label": "Login to Example Institution",
"header": "Please Log In",
"description": "Example Institution requires that you log in with your example account to view this content.",
"confirmLabel": "Login",
"failureHeader": "Authentication Failed",
"failureDescription": "<a href=\"http://example.org/policy\">Access Policy</a>"
}
]
},
"02_gauguin.jpg" : {
"label": "Login with degraded access for unauthed users",
"auth_services" : [
{
"profile": "http://iiif.io/api/auth/1/login",
"label": "Login to Example Institution for full quality",
"header": "Please Log In",
"description": "Example Institution requires that you log in with your example account to view the full-quality content.",
"confirmLabel": "Login",
"failureHeader": "Viewing greyscale version",
"failureDescription": "You don't appear to have access to the full colour version. <a href=\"http://example.org/policy\">Access Policy</a>"
}
],
"degraded": "02_gauguin_degraded.jpg"
},
"02_gauguin_degraded.jpg" : {
"label": "The degraded (open) form of the above",
"open" : true,
"degraded_for": "02_gauguin.jpg"
},
...
]
さまざまな処理が可能なはずですので、上記ファイルと以下を参考に、色々と試してみるのがよさそうです。
まとめ
国内では島根大学などを除いて、あまり導入例を見ないiiif auth apiですが、本記事が参考になりましたら幸いです。
具体的な実装方法などについても、今後調査してみたいと思います。
Discussion