API(Application Programming Interface)は、異なるソフトウェア間でデータをやり取りするための手段です。しかし、安全なデータのやり取りをするには認証(Authentication)と認可(Authorization)が必要です。この記事では、Pythonを使用してAPIの認証と認可の基本的なメカニズムと応用例を解説します。
目次
認証と認可の基本
認証はユーザーが誰であるかを確認するプロセスです。認可は認証されたユーザーが特定のリソースにアクセスする権限があるかどうかを判定するプロセスです。
認証メカニズム
認証には主にBasic認証、APIキー、OAuthなどがあります。
Basic認証
HTTPヘッダーにユーザー名とパスワードを含める方式です。
import requests
from requests.auth import HTTPBasicAuth
response = requests.get('https://example.com/api/data', auth=HTTPBasicAuth('username', 'password'))
APIキー
APIキーをHTTPヘッダーかURLパラメーターに付加する方式です。
response = requests.get('https://example.com/api/data?key=API_KEY')
OAuth
トークンを用いて認証を行います。通常、ユーザー認証後に発行されるトークンを使用します。
headers = {'Authorization': 'Bearer ACCESS_TOKEN'}
response = requests.get('https://example.com/api/data', headers=headers)
認可メカニズム
認可にはRole-Based Access Control(RBAC)やJWT(JSON Web Tokens)などがあります。
RBAC
ユーザーにロールを割り当て、ロールに応じてアクセス権を制御します。
JWT
JWTは認可とデータのやり取りを行うためのトークンです。
import jwt
payload = {'user_id': 123}
encoded_jwt = jwt.encode(payload, 'secret', algorithm='HS256')
応用例1: 自作APIの認証
自作のAPIに認証メカニズムを組み込む例です。
from flask import Flask, request
import jwt
app = Flask(__name__)
@app.route('/api/data', methods=['GET'])
def get_data():
token = request.headers.get('Authorization').split(' ')[1]
decoded_token = jwt.decode(token, 'secret', algorithms=['HS256'])
if decoded_token['user_id'] == 123:
return {'data': 'some data'}
else:
return {'error': 'Unauthorized'}, 401
応用例2: 外部サービスのAPIを使う
OAuthを用いて外部サービスのAPIにアクセスする例です。
import requests
def get_github_repos(access_token):
headers = {'Authorization': f'Bearer {access_token}'}
response = requests.get('https://api.github.com/user/repos', headers=headers)
return response.json()
まとめ
APIの認証と認可は重要なセキュリティ要件です。Pythonを用いてこれらのメカニズムを理解と実装することで、より安全なアプリケーション開発が可能です。
コメント