Source code for ibmcloud_python_sdk.auth

from ibmcloud_python_sdk.utils import constants
from ibmcloud_python_sdk.config import params
from ibmcloud_python_sdk.utils import common
from jwt import decode

cfg = params()
headers = {}


[docs]def decode_token(): """Decode JWT token :return: JSON JWT information :rtype: dict """ try: token = get_headers()["Authorization"] return decode(token.split(" ")[1], verify=False) except Exception as error: print("Error decoding token. {}".format(error)) raise
[docs]def get_token(url, key): """Generate JWT IAM token :param url: IAM URL :type url: string :param key: API Key :type key: string :return: IAM token :rtype: string """ # Payload for retrieving token payload = ("grant_type=urn:ibm:params:oauth:grant-type:" "apikey&apikey={}".format(key)) # Required headers headers_auth = { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', } try: # Retrieve data data = common.query_wrapper("auth", "POST", "/identity/token", headers_auth, payload)["data"] # Concatenate token type and token value return data['token_type'] + ' ' + data['access_token'] # If an error happens while retrieving token except Exception as error: print("Error getting token. {}".format(error)) raise
[docs]def get_headers(): """Generates the headers used for authenticated HTTP request. :return: Dict of headers :rtype: dict """ if not headers: headers["Content-Type"] = "application/json" headers["Accept"] = "application/json" headers["User-Agent"] = constants.USER_AGENT headers["Authorization"] = get_token(constants.AUTH_URL, cfg["key"]) return headers return headers