def protect_request(self, request):
        """
        Adds authorization header, and encrypts and signs the request if supported on the specific request.
        :param request: unprotected request to apply security protocol
        :return: protected request with appropriate security protocal applied
        """
        # Setup the auth header on the request
        # Due to limitations in the service we hard code the auth scheme to 'Bearer' as the service will fail with any
        # other scheme or a different casing such as 'bearer', once this is fixed the following line should be replaced:
        # request.headers['Authorization'] = '{} {}'.format(auth[0], auth[1])
        request.headers['Authorization'] = '{} {}'.format('Bearer', self.client_security_token)

        # if the current message security doesn't support message protection, or the body is empty
        # skip protection and return the original request
        if not self.supports_protection() or len(request.body) == 0:
            return request

        plain_text = request.body

        # if the client encryption key is specified add it to the body of the request
        if self.client_encryption_key:
            # note that this assumes that the body is already json and not simple string content
            # this is true for all requests which currently support message encryption, but might
            # need to be revisited when the types of
            body_dict = json.loads(plain_text)
            body_dict['rek'] = {'jwk': self.client_encryption_key.to_jwk().serialize()}
            plain_text = json.dumps(body_dict).encode(encoding='utf8')

        # build the header for the jws body
        jws_header = _JwsHeader()
        jws_header.alg = 'RS256'
        jws_header.kid = self.client_signature_key.kid
        jws_header.at = self.client_security_token
        jws_header.ts = int(time.time())
        jws_header.typ = 'PoP'

        jws = _JwsObject()

        jws.protected = jws_header.to_compact_header()
        jws.payload = self._protect_payload(plain_text)
        data = (jws.protected + '.' + jws.payload).encode('ascii')
        jws.signature = _bstr_to_b64url(self.client_signature_key.sign(data))

        request.headers['Content-Type'] = 'application/jose+json'

        request.prepare_body(data=jws.to_flattened_jws(), files=None)

        return request
def protect_request(self, request):
        """
        Adds authorization header, and encrypts and signs the request if supported on the specific request.
        :param request: unprotected request to apply security protocol
        :return: protected request with appropriate security protocal applied
        """
        # Setup the auth header on the request
        # Due to limitations in the service we hard code the auth scheme to 'Bearer' as the service will fail with any
        # other scheme or a different casing such as 'bearer', once this is fixed the following line should be replaced:
        # request.headers['Authorization'] = '{} {}'.format(auth[0], auth[1])
        request.headers['Authorization'] = '{} {}'.format('Bearer', self.client_security_token)

        # if the current message security doesn't support message protection, or the body is empty
        # skip protection and return the original request
        if not self.supports_protection() or len(request.body) == 0:
            return request

        plain_text = request.body

        # if the client encryption key is specified add it to the body of the request
        if self.client_encryption_key:
            # note that this assumes that the body is already json and not simple string content
            # this is true for all requests which currently support message encryption, but might
            # need to be revisited when the types of
            body_dict = json.loads(plain_text)
            body_dict['rek'] = {'jwk': self.client_encryption_key.to_jwk().serialize()}
            plain_text = json.dumps(body_dict).encode(encoding='utf8')

        # build the header for the jws body
        jws_header = _JwsHeader()
        jws_header.alg = 'RS256'
        jws_header.kid = self.client_signature_key.kid
        jws_header.at = self.client_security_token
        jws_header.ts = int(time.time())
        jws_header.typ = 'PoP'

        jws = _JwsObject()

        jws.protected = jws_header.to_compact_header()
        jws.payload = self._protect_payload(plain_text)
        data = (jws.protected + '.' + jws.payload).encode('ascii')
        jws.signature = _bstr_to_b64url(self.client_signature_key.sign(data))

        request.headers['Content-Type'] = 'application/jose+json'

        request.prepare_body(data=jws.to_flattened_jws(), files=None)

        return request
def protect_request ( self , request ) : # Setup the auth header on the request # Due to limitations in the service we hard code the auth scheme to 'Bearer' as the service will fail with any # other scheme or a different casing such as 'bearer', once this is fixed the following line should be replaced: # request.headers['Authorization'] = '{} {}'.format(auth[0], auth[1]) request . headers [ 'Authorization' ] = '{} {}' . format ( 'Bearer' , self . client_security_token ) # if the current message security doesn't support message protection, or the body is empty # skip protection and return the original request if not self . supports_protection ( ) or len ( request . body ) == 0 : return request plain_text = request . body # if the client encryption key is specified add it to the body of the request if self . client_encryption_key : # note that this assumes that the body is already json and not simple string content # this is true for all requests which currently support message encryption, but might # need to be revisited when the types of body_dict = json . loads ( plain_text ) body_dict [ 'rek' ] = { 'jwk' : self . client_encryption_key . to_jwk ( ) . serialize ( ) } plain_text = json . dumps ( body_dict ) . encode ( encoding = 'utf8' ) # build the header for the jws body jws_header = _JwsHeader ( ) jws_header . alg = 'RS256' jws_header . kid = self . client_signature_key . kid jws_header . at = self . client_security_token jws_header . ts = int ( time . time ( ) ) jws_header . typ = 'PoP' jws = _JwsObject ( ) jws . protected = jws_header . to_compact_header ( ) jws . payload = self . _protect_payload ( plain_text ) data = ( jws . protected + '.' + jws . payload ) . encode ( 'ascii' ) jws . signature = _bstr_to_b64url ( self . client_signature_key . sign ( data ) ) request . headers [ 'Content-Type' ] = 'application/jose+json' request . prepare_body ( data = jws . to_flattened_jws ( ) , files = None ) return request
Adds authorization header, and encrypts and signs the request if supported on the specific request.
        :param request: unprotected request to apply security protocol
        :return: protected request with appropriate security protocal applied
Adds authorization header and encrypts and signs the request if supported on the specific request . : param request : unprotected request to apply security protocol : return : protected request with appropriate security protocal applied