我是 rest API 上实现安全身份验证的新手。我正在尝试从 aws cognito 用户池实施 oauth2 授权。
from flask import Flask,jsonify,render_template,request
import requests
import socket
app = Flask(__name__)
name='Umesh'
App_client_id = 'cleintId'
App_client_secret = 'clientSecret'
url = 'https://myurl.auth.eu-west-1.amazoncognito.com'
targetApi = 'https://myTargetApi/v1/product'
class setTokenCache():
cache=''
obj= setTokenCache()
#print("Acces token is ", obj.cache)
@app.route('/login')
def index():
try:
grant_type = 'client_credentials'
response = requests.post(url + '/oauth2/token',
auth=(App_client_id, App_client_secret),
data={'grant_type': grant_type, 'client_id': App_client_id,
'client_secret': App_client_secret})
print("Staus code", response)
if response.status_code!=200:
return "You are not authenticated"
else:
result = response.json()
obj.cache = result['access_token']
print("Access token is",obj.cache)
return "You are Logined"
except socket.gaierror as e:
print("Unable to get the r")
API 1 登录
下面是 api 返回 #'您已登录',如果它使用刚刚生成的访问令牌进行身份验证。只需考虑它是登录部分。
API 2 访问产品详细信息
现在我有了这个 API,我想使用上面生成的访问令牌获取有效的响应。
@app.route('/getProductDetails', methods=['GET', 'POST'])
def productDetails():
print("Access token is",obj.cache)
headers = {'Authorization': 'Bearer ' + accessToken, 'Accept': 'application/json'}
try:
response = requests.get(targetApi, headers=headers)
return response.json()
except socket.gaierror as e:
print("Unable to get the r")
在这里,我需要传递 #accessToken 才能获得有效的响应,否则它将返回,#unauthrized
预期:
现在我想知道我应该如何通过这个 api 实现这种安全性,以便
- 它应该使用上面创建的访问令牌,直到它过期,以便从 api 获得有效的响应
http://127.0.0.1:5000/getProductDetails
或 2. 如何确保浏览器/客户端在从 API 1 导航到 API 直到过期时如何使用相同的令牌
如果有人可以在这方面提供帮助,请表示感谢?
在 Cognito 令牌验证方面,下面有一些示例 NodeJS 代码,您应该找到一个适用于您的编程语言的库。此外,以下在线工具也可用于了解验证过程:
- NodeJS 中的认知令牌验证
- 在内存中标记验证写入