Package: akamai-edgeauth
EdgeAuth-Token-Python is Akamai Edge Authorization Token in the HTTP Cookie, Query String, and Header for a client.
You can configure it in the Property Manager athttps://control.akamai.com.
It’s a behavior which is Auth Token 2.0 Verification.EdgeAuth-Token-Python supports Python 2.6–2.7 & 3.3–3.6 and runs great on PyPy.InstallationTo install Akamai Edge Authorization Token for Python:$pipinstallakamai-edgeauthExamplefromakamai.edgeauthimportEdgeAuth,EdgeAuthErrorimportrequests# just for this exampleET_HOSTNAME='edgeauth.akamaized.net'ET_ENCRYPTION_KEY='YourEncryptionKey'DURATION=500# secondsET_ENCRYPTION_KEY must be hexadecimal digit string with even-length.Don’t expose ET_ENCRYPTION_KEY on the public repository.URL parameter option# 1) Cookieet=EdgeAuth(**{'key':ET_ENCRYPTION_KEY,'window_seconds':DEFAULT_WINDOW_SECONDS})token=et.generate_url_token("/akamai/edgeauth")url="http://{0}{1}".format(ET_HOSTNAME,"/akamai/edgeauth")response=requests.get(url,cookies={et.token_name:token})print(response)# Maybe not 403# 2) Query stringtoken=et.generate_url_token("/akamai/edgeauth")url="http://{0}{1}?{2}={3}".format(ET_HOSTNAME,"/akamai/edgeauth",et.token_name,token)response=requests.get(url)print(response)‘Escape token input’ option in the Property Manager corresponds to ‘escape_early’ in the code.Escape token input (on) == escape_early (True)Escape token input (off) == escape_early (False)In [Example 2] for Query String, it’s only okay for ‘Ignore query string’ option (on).If you want to ‘Ignore query string’ option (off) using query string as your token, Please contact your Akamai representative.ACL(Access Control List) parameter option# 1) Header using *et=EdgeAuth((**{'key':ET_ENCRYPTION_KEY,'window_seconds':DEFAULT_WINDOW_SECONDS})token=et.generate_acl_token("/akamai/edgeauth/list/*")url="http://{0}{1}".format(ET_HOSTNAME,"/akamai/edgeauth/list/something")response=requests.get(url,headers={et.token_name:token})print(response)# 2) Cookie Delimited by '!'acl_path=["/akamai/edgeauth","/akamai/edgeauth/list/*"]token=at.generate_acl_token(acl_path)# url = "http://{0}{1}".format(ET_HOSTNAME, "/akamai/edgeauth")url="http://{0}{1}".format(ET_HOSTNAME,"/akamai/edgeauth/list/something2")response=requests.get(url,cookies={at.token_name:token})print(response)ACL can use the wildcard(*, ?) in the path.Don’t use ‘!’ in your path because it’s ACL Delimiter.Use ‘escape_early=False’ as default setting but it doesn’t matter turning on/off ‘Escape token input’ option in the Property ManagerUsageEdgeAuth ClassclassEdgeAuth(token_type=None,token_name='__token__',key=None,algorithm='sha256',salt=None,ip=None,payload=None,session_id=None,start_time=None,end_time=None,window_seconds=None,field_delimiter='~',acl_delimiter='!',escape_early=False,verbose=False)ParameterDescriptiontoken_typeSelect a preset. (Not Supported Yet)token_nameParameter name for the new token. [Default: ‘__token__’]keySecret required to generate the token. It must be hexadecimal digit string with even-length.algorithmAlgorithm to use to generate the token. (‘sha1’, ‘sha256’, or ‘md5’) [Default: ‘sha256’]saltAdditional data validated by the token but NOT included in the token body. (It will be deprecated)ipIP Address to restrict this token to. (Troublesome in many cases (roaming, NAT, etc) so not often used)payloadAdditional text added to the calculated digest.session_idThe session identifier for single use tokens or other advanced cases.start_timeWhat is the start time? (Use string ‘now’ for the current time)end_timeWhen does this token expire? end_time overrides window_secondswindow_secondsHow long is this token valid for?field_delimiterCharacter used to delimit token body fields. [Default: ~]acl_delimiterCharacter used to delimit acl. [ Default: ! ]escape_earlyCauses strings to be ‘url’ encoded before being used.verbosePrint all parameters.EdgeAuth’s Methoddefgenerate_url_token(url)defgenerate_acl_token(acl)# Returns the authorization token string.ParameterDescriptionurlSingle URL path (String)aclAccess Control List can use the wildcard(*, ?). It can be String (single path) or Array (multi paths)Test“/test” directory is only for the internal test.OthersIf you use theSegmented Media Protectionbehavior in AMD(Adaptive Media Delivery) Product,token_nameshould be ‘hdnts’.Command$pythoncms_edgeauth.py-kYourEncryptionKey-w5000-u/hello/world-xUse -h or –help option for the detail.