如何解决如何动态获取NGINX代理的API访问令牌
我开始使用iOS应用程序的IGDB API。几天前,IGDB推出了V4,该V4现在需要通过oAuth2向Twitch进行授权才能接收应用访问令牌。
凭借对后端的了解(我昨天刚开始学习NGINX),我设法建立了一个NGINX Web服务器,该服务器代理对IGDB API的请求,并将应用程序访问令牌注入HTTP标头。目前,此功能正常。
nginx.conf中包含的我的proxy.conf看起来像这样:
server {
listen 443 ssl;
server_name myhost.com;
#SSL Config cut out
...
location / {
proxy_pass https://api.igdb.com/v4/games;
proxy_ssl_server_name on;
proxy_set_header Client-ID "MY TWITCH APP CLIENT ID";
proxy_set_header Authorization "Bearer THE_APP_ACCESS_TOKEN";
}
}
但是我手动请求了THE_APP_ACCESS_TOKEN
。出于测试目的,这很好,但是它将在约60天后过期(根据Twitch开发文档)。我现在想知道如何动态地请求访问令牌(并以某种方式存储它?),在令牌过期时刷新它并将其注入proxy.conf。
在进行研究时,我偶然发现HTTP Auth Request模块与NGINX JavaScript模块(https://www.nginx.com/blog/validating-oauth-2-0-access-tokens-nginx/)相结合。
现在,我想知道在代理请求之前通过Auth Request Module触发令牌请求,使用JavaScript模块解析JSON响应并将响应中包含的应用访问令牌作为变量注入到javascript中是否是一种合理的方法。代理的HTTP标头。尽管从理论上讲这对我来说听起来不错,但我几乎不知道如何实现这一点。而且,这种方法还不包括令牌过期后立即存储和更新。
您对我有什么提示,如何解决?还是有其他解决方案?
解决方法
好的,这就是我的想法。这似乎适合我的用例:
-
我编写了一个Shell脚本,该脚本向twitch oAuth端点发出一个
curl
POST请求,以获取应用访问令牌,并将JSON响应输出到文件(此处为access.json)curl -o access.json -X POST 'https://id.twitch.tv/oauth2/token?client_id=<YOUR_CLIENT_ID>&client_secret=<YOUR_CLIENT_SECRET>&grant_type=client_credentials'
-
然后,脚本使用
access_token
命令行工具解析access.json中的jq
键的值,并将其保存到变量newAccessToken
中。这是通过以下行完成的:newAccessToken=$(cat /<PATH_TO_JSON>/access.json | jq -r '.access_token')
cat
命令输出access.json并将其通过管道传递到jq
命令 会为JSON过滤access_token
键值。 -
在脚本的同一目录中,我放置了一个
proxy_template.conf
,它包含上面的所有配置信息,但是它不是字符串,而是由手动输入的访问令牌“ THEACCESSTOKEN”。 -
将
access_token
密钥存储在newAccessToken
变量中后,我在proxy_template.conf中搜索“ THEACCESSTOKEN”字符串,将其替换为newAccessToken变量的值并保存输出在proxy.conf
目录中的新/etc/nginx/conf.d
中。这是通过sed
命令完成的:sed "s/THEACCESSTOKEN/$newAccessToken/g" /<PATH_TO_FILE>/proxy_template.conf > /nginx/etc/conf.d/proxy.conf
-
在脚本的最后一行中,我只是
nginx -s reload
服务器以使用新的配置文件。 -
为了定期接收新鲜的访问令牌,我设置了一个cron作业,该作业每天执行一次shell脚本。
不确定这是否是最优雅的解决方案,但对于我的用例而言,它似乎可以正常工作。如果您有其他最佳做法,我将不胜感激。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。