简介
本文档介绍配置API访问并将其用于从安全访问获取资源信息的步骤。
先决条件
Cisco 建议您了解以下主题:
- Python 3.x
- REST API
- 思科安全访问
要求
在继续操作之前,必须满足以下要求:
- 具有Full Adminuser角色的Cisco Secure Access用户帐户。
- 思科安全云单点登录(SCSO)帐户,用于登录安全访问。
使用的组件
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
配置
安全访问API提供标准REST接口并支持OAuth 2.0客户端凭证流。要开始使用,请登录安全访问并创建安全访问API密钥。然后,使用您的API凭证生成API访问令牌。
注意:API密钥、密码、机密和令牌允许访问您的私有数据。您绝不能与其他用户或组织共享您的凭据。
在执行本文中提到的脚本之前,请从Secure Access Dashboard配置API密钥。
创建API密钥
使用以下步骤创建API密钥和密钥。使用URL登录安全访问:安全访问
- 从左侧边栏中选择选项
Admin
。
- 在
Admin
下,选择选项 API Keys:
安全访问控制面板管理员 — API密钥
3.在右上角,单击按钮以+
添加新的API密钥:
安全访问 — 添加API密钥
4.提供(API Key Name, Description
可选),并根据需Key scope
要Expiry date
选择和。完成后,单击此按Create
钮:
安全访问 — API密钥详细信息
5.复制API Key
和,Key Secret
然后单击ACCEPT AND CLOSE
:
安全访问 — API密钥和密钥
注意:复制您的API密钥只有一个机会。安全访问不会保存您的API密钥,您无法在初始创建后检索它。
Python代码
考虑到生成的令牌的有效期为3600秒(1小时),有多种方法可以编写此代码。 您可以创建2个单独的脚本,其中第一个脚本可用于生成承载令牌,第二个脚本可用于对您感兴趣的资源进行API调用(获取/更新或删除),或者编写一个脚本来采取这两个操作,同时确保如果已经生成承载令牌,则代码中会保留一个条件,即每次执行脚本时不会生成新的承载令牌。
为了使其在python中运行,请确保安装以下库:
pip install oauthlib
pip install requests_oauthlib
脚本1:
确保在此脚本中提client_id
出正client_secret
确的和:
import requests
from oauthlib.oauth2 import BackendApplicationClient
from oauthlib.oauth2 import TokenExpiredError
from requests_oauthlib import OAuth2Session
from requests.auth import HTTPBasicAuth
token_url = 'https://api.sse.cisco.com/auth/v2/token'
client_id = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
client_secret = "XXXXXXXXXXXXXXXXXXXXXXXXX"
class SecureAccessAPI:
def __init__(self, url, ident, secret):
self.url = url
self.ident = ident
self.secret = secret
self.token = None
def GetToken(self):
auth = HTTPBasicAuth(self.ident, self.secret)
client = BackendApplicationClient(client_id=self.ident)
oauth = OAuth2Session(client=client)
self.token = oauth.fetch_token(token_url=self.url, auth=auth)
return self.token
# Get token
api = SecureAccessAPI(token_url, client_id, client_secret)
print("Token: " + str(api.GetToken()))
输出:
此脚本的输出必须如下所示:
Token: {'token_type': 'bearer', 'access_token': 'eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...', 'expires_in': 3600, 'expires_at': 1707767804.6489065}
有access_token
数千个字符的长度非常长,因此为了保持输出可读,仅在本示例中将其缩短。
脚本2:
然后access_token
,可以在此脚本中使用来自脚本1的API进行API调用。例如,使用脚本2获取有关使用资源的网络隧道组的信息/deployments/v2/networktunnelgroups
:
import requests
import pprint
import json
url = "https://api.sse.cisco.com/deployments/v2/networktunnelgroups"
BT = "eyJhbGciOiJSUzI1NiIsImtpZCI6IjcyNmI5MGUzLWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...'"
headers = { 'Authorization':f"Bearer {BT}"
,"Accept": "application/json" }
response = requests.request('GET', url, headers=headers)
json_object = json.loads(response.content)
pprint.pprint(json_object)
输出:
此脚本的输出必须如下所示:
Python输出 — 网络隧道组
您还可以通过Secure Access Developers User Guide获取有关策略、漫游计算机、报告等的信息。
故障排除
安全访问API终端使用HTTP响应代码来指示API请求的成败。通常,2xx范围内的代码指示成功,4xx范围内的代码指示由提供的信息导致的错误,而5xx范围内的代码指示服务器错误。解决问题的方法取决于收到的响应代码:
REST API — 响应代码1
REST API — 响应代码2
相关信息