HTTP API를 사용하여 파이어 폭스 DB에 파이썬 웹 애플리케이션을 작성하려고합니다 (Google I/O 2016에 발표 된 새로운 버전의 Firebase를 사용하고 있습니다).Firebase DB HTTP API 인증 : JWT 토큰을 새로 고치는시기와 방법
나의 이해는 지금까지 쓰기의 특정 유형은 내가이 유형의 URL에 POST 요청을 만들어 달성하고자한다는 것입니다 :
https://my-project-id.firebaseio.com/{path-to-resource}.json
내가 부족 무엇가있다 auth part : 올바르게 가져 오면 JWT는 HTTP 인증 헤더에 Authorization : Bearer {token}
으로 전달되어야합니다.
그래서 서비스 계정을 만들고 비공개 키를 다운로드하여 JWT를 생성하고 요청 헤더에 추가하면 요청이 Firebase DB에 성공적으로 기록됩니다.
이제 JWT가 만료되었으며 파이어베이스 DB에 대한 유사한 요청이 실패합니다.
물론 새 토큰을 생성해야하지만 질문은 다음과 같습니다. 토큰 생성을 처리하지 않아도되고 대부분의 HTTP API가 요청에서 전달되는 정적 API 키를 요구하는 데 사용되는 대부분의 HTTP API 그래서 내 webapps는 요청에 stati api 키 문자열을 추가하는 것만으로도 비교적 간단하게 유지할 수 있습니다.
토큰 생성 및 만료를 처리해야한다면 webapp 논리가 복잡해집니다 (토큰을 저장하고 유효한지 확인한 다음 유효하지 않은 경우 새 값을 생성해야하기 때문에). 모든 요청에 대해 새 토큰을 생성 할 수는 있습니다 (하지만 실제로이 의미가 있습니까?).
이 점에 대해 따라야 할 최선의 방법이 있는지 또는이 항목과 관련된 설명서에서 뭔가 빠졌는지 알고 싶습니다. 새로운 JWT가 생성되는 모든 요청에 대해 현재
import requests
import json
from oauth2client.service_account import ServiceAccountCredentials
_BASE_URL = 'https://my-app-id.firebaseio.com'
_SCOPES = [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/firebase.database'
]
def _get_credentials():
credentials = ServiceAccountCredentials.from_json_keyfile_name('my_service_account_key.json', scopes=_SCOPES)
return credentials.get_access_token().access_token
def post_object():
url = _BASE_URL + '/path/to/write/to.json'
headers = {
'Authorization': 'Bearer '+ _get_credentials(),
'Content-Type': 'application/json'
}
payload = {
'title': title,
'message': alert
}
return requests.post(url,
data=json.dumps(payload),
headers=headers)
:
감사합니다, 마르코
부칙
이 내가 현재 실행 해요 코드입니다. 그것은 나에게 최적이 아닌 것 같습니다. 만료되지 않는 토큰을 생성 할 수 있습니까?
아마도 이것은 서버 측 액세스 용입니까? 실제로 가장 할 것으로 예상되는 것은 서비스 계정에서 생성 된 Google 액세스 토큰을 사용하는 것입니다. [여기에 예제가있다] (http://stackoverflow.com/questions/37539066/how-to-authenticate-in-ruby-via-rest-api/38535125#38535125) 루비에서 어떻게하는지. –
예, 서버 측 액세스 용입니다. 내가 한 일은 질문 문안에 추가되었습니다. 모든 요청에 대해 새로운 JWT를 생성하고 있기 때문에 여전히 최적이 아니라고 생각합니다. 서버 측 접근을 위해서 나는 정적 (비 만료되지 않는) 토큰을 사용할 수 있기를 바랬다. –
3.x SDK에서 보안상의 이유로 더 이상 하나의 수명이 긴 무기명 토큰을 허용하지 않습니다. –