我们使用google oauth在Apache中使用OpenId Connect进行jenkins身份验证设置(参考:https://cloudavail.com/2014/06/07/apache-auth-oidc-google-apps-2/)。
为了自动化一些jenkins工作,我们必须先进行身份验证。
我在python脚本中使用client-secrets.json获取了访问令牌和刷新令牌,在此过程中已经完成了对google邮件的身份验证。
我使用以下脚本使用刷新令牌自动刷新令牌,然后使用新令牌列出Jenkins中的所有作业或项目。
为什么在获取访问令牌时,在授权步骤中我已经使用gmail授权时,它会将我重定向到谷歌登录。如果有人能帮我解决这个问题,那将是一个很大的帮助。
以下是脚本(token.json和extra.json包含令牌和客户端详细信息)
#!/usr/bin/env python
import requests_oauthlib, json
from requests_oauthlib import OAuth2Session, TokenUpdated
protected_url='<jenkins_url>/api/json?pretty=true'
refresh_url='https://accounts.google.com/o/oauth2/token'
#Start here
TOKEN_FILE='token.json'
EXTRA_FILE='extra.json'
with open(TOKEN_FILE, 'r') as f:
token = json.load(f)
with open(EXTRA_FILE, 'r') as f:
extra = json.load(f)
client_id=extra['client_id']
def token_saver(token_temp):
token = token_temp
from requests_oauthlib import OAuth2Session
client = OAuth2Session(client_id, token=token, auto_refresh_url=refresh_url,auto_refresh_kwargs=extra, token_updater=token_saver)
token=client.refresh_token(refresh_url, **extra)
token_saver(token)
client = OAuth2Session(client_id, token=token)
r = client.get(protected_url)
print r.content
token.json内容
{
"access_token": "{access_token}",
"refresh_token": "{Refresh_token}",
"id_token": "{id_token}",
"token_type": "Bearer",
"expires_in": "5"
}
extra.json内容
{
"client_id":"{client_id}",
"client_secret":"{client_secret}"
}