用于帮助DataOne登录证书的工具

d1Login的Python项目详细描述


用于在dataone环境中进行身份验证的python帮助程序。

d1_证书库提供一些例程来帮助验证与dataone服务的交互。 身份验证需要web浏览器ui,因此不适合在无头系统上使用。基本过程是:

  1. 打开Web浏览器以选择身份提供程序
  2. 凭证将输入到选定的idp中
  3. 将创建证书签名请求,并从cilogon重新获取令牌信息
  4. 证书已签名并移动到一致的位置。

注意事项:

  1. 需要Web浏览器
  2. 假设web浏览器下载的文件位于${home}/downloads中
  3. 生成的证书放入${home}/.dataone/certificates
  4. 证书中的主题映射和组信息是静态的。请注意,证书将需要 如果需要更改用户标识映射或组成员身份,则重新生成。

安装

释放安装:

pip install -U d1login

开发安装:

git clone
cd d1Login
pip install -U -e .

示例

命令行应用程序将在适当的登录url处打开web浏览器。验证后,浏览器将 下载.jnlp文件。这应该放在~/downloads中。脚本将等待(最长60秒) .jnlp一旦可用,将处理该文件并请求证书。

命令行:

d1login
<<browser opens, download jnlp file>>
Certificate downloaded to: /Users/vieglais/.dataone/certificates/x509up_u501

作为库:

>>> import d1_certificate
>>> service = d1_certificate.LOGIN_SERVICE['dev']
>>> certpath = d1_certificate.login(overwrite=True, service=service)
# Browser window opens for authentication

>>> print certpath
/Users/vieglais/.dataone/certificates/x509up_u501

>>> d1_certificate.getSubjectFromCertFile( certpath )
{'not_after': '20151216225323Z',
 'not_before': '20151216044823Z',
 'status': True,
 'subject': 'CN=Dave Vieglais A34511,O=Google,C=US,DC=cilogon,DC=org',
 'subject_info': None}

在OSX上,证书可以导入到密钥链中,以便浏览器与经过身份验证的节点进行交互 环境例如:

CERT=/Users/vieglais/.dataone/certificates/x509up_u501
openssl x509 -outform der -in ${CERT} -out "${CERT}.der"
security add-certificates "${CERT}.der"

现在打开一个浏览器(chrome或safari,firefox使用独立于keychain的证书管理) 并访问网址:

https://cn-dev.test.dataone.org/cn/v2/diag/subject

您应该在XML响应中看到您的凭据。

在Yosemite上,您不能再使用.pem格式的证书来使用curl进行身份验证 [见:http://curl.haxx.se/mail/archive-2014-10/0053.html]。相反,转换为.p12格式的证书并使用它 相反。当然,请注意,像这样在命令行中输入密码是一种安全风险,因为它将 出现在bash历史记录、日志文件等中。示例:

CERT=/Users/vieglais/.dataone/certificates/x509up_u501
openssl pkcs12 -export -in ${CERT} -out ${CERT}.p12 -passout pass:Some_Password
curl -E ${CERT}.p12:Some_Password "https://cn.dataone.org/cn/v2/diag/subject"

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Google Billing Library:QueryPurchaseAsync:取消购买的订阅资源未返回   java转换列表mapsturct中的单个对象   java简单算法。我做不好   包含集合的@ManyToMany映射的java JPA2持久性   在Java中序列化和反序列化对象时发生BuffereImage错误   java使用ui:param传递值并在backingbean中访问它们   java从应用程序读取配置。yml至POJO列表地图   java中在while循环外部调用文件值   java如何与来自不同类的UI交互   java如何在jTable中显示2D数组?   在Java 8中,类为什么不从接口继承默认方法?   java类。getAnnotation和getAnnotations无法正常工作   java处理pagertabstrip上的触摸事件   java GWT和struts2异常   用Java解析HTTP查询字符串   java这段代码SQL注入安全吗?