azext_iot/dps/services/auth.py (20 lines of code) (raw):
# coding=utf-8
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import time
import base64
import hmac
import hashlib
import urllib
def get_dps_sas_auth_header(
scope_id, device_id, key,
):
sr = "{}%2Fregistrations%2F{}".format(scope_id, device_id)
expires = int(time.time() + 21600)
registration_id = f"{sr}\n{str(expires)}"
secret = base64.b64decode(key)
signature = base64.b64encode(
hmac.new(
secret, msg=registration_id.encode("utf8"), digestmod=hashlib.sha256
).digest()
)
quote_signature = urllib.parse.quote(signature, "~()*!.'")
token = f"SharedAccessSignature sr={sr}&sig={quote_signature}&se={str(expires)}&skn=registration"
return token