示例#1
0
 def get_token(*args, **kwargs):  # pylint: disable=unused-argument
     from azure.core.credentials import AccessToken
     import time
     fake_raw_token = 'top-secret-token-for-you'
     now = int(time.time())
     return AccessToken(fake_raw_token, now + 3600)
示例#2
0
 def setUpClass(cls, credential):
     credential.get_token = Mock(return_value=AccessToken("some_token", datetime.now().replace(tzinfo=TZ_UTC)))
     TestChatThreadClient.credential = credential
 def __init__(self):
     self.token = AccessToken("YOU SHALL NOT PASS", 0)
示例#4
0
 async def get_token(self, *scopes, **kwargs) -> AccessToken:  # pylint: disable=unused-argument
     """
     Returns an AcccesToken object.
     """
     return AccessToken(self.token, self.expires_on)
 def get_token(self, *scopes, **kwargs):
     """
     This method is automatically called when token is about to expire.
     """
     return AccessToken(self.token, self.expiry)
示例#6
0
async def test_azure_ml():
    """Azure ML: MSI_ENDPOINT, MSI_SECRET set (like App Service 2017-09-01 but with a different response format)"""

    expected_token = AccessToken("****", int(time.time()) + 3600)
    url = "http://localhost:42/token"
    secret = "expected-secret"
    scope = "scope"
    client_id = "client"

    transport = async_validating_transport(
        requests=[
            Request(
                url,
                method="GET",
                required_headers={
                    "secret": secret,
                    "User-Agent": USER_AGENT
                },
                required_params={
                    "api-version": "2017-09-01",
                    "resource": scope
                },
            ),
            Request(
                url,
                method="GET",
                required_headers={
                    "secret": secret,
                    "User-Agent": USER_AGENT
                },
                required_params={
                    "api-version": "2017-09-01",
                    "resource": scope,
                    "clientid": client_id
                },
            ),
        ],
        responses=[
            mock_response(
                json_payload={
                    "access_token": expected_token.token,
                    "expires_in": 3600,
                    "expires_on": expected_token.expires_on,
                    "resource": scope,
                    "token_type": "Bearer",
                })
        ] * 2,
    )

    with mock.patch.dict(
            MANAGED_IDENTITY_ENVIRON,
        {
            EnvironmentVariables.MSI_ENDPOINT: url,
            EnvironmentVariables.MSI_SECRET: secret
        },
            clear=True,
    ):
        credential = ManagedIdentityCredential(transport=transport)
        token = await credential.get_token(scope)
        assert token.token == expected_token.token
        assert token.expires_on == expected_token.expires_on

        credential = ManagedIdentityCredential(transport=transport,
                                               client_id=client_id)
        token = await credential.get_token(scope)
        assert token.token == expected_token.token
        assert token.expires_on == expected_token.expires_on
示例#7
0
 def get_token(*scopes):
     assert len(scopes) == 1
     assert scopes[0] == expected_scope
     return AccessToken(expected_token, 0)
示例#8
0
 async def get_token(*_, **__):
     return AccessToken("***", 42)
示例#9
0
    async def get_token(self, *scopes, **kwargs):
        from azure.core.credentials import AccessToken

        return AccessToken("fake_token", 2527537086)
示例#10
0
 def get_token(self, *scopes, **kwargs):  # pylint: disable=unused-argument
     from azure.core.credentials import AccessToken
     import time
     now = int(time.time())
     return AccessToken("access_token_from_" + self._authority, now + 3600)
 def credential(self):
     if self.is_live:
         return DefaultAzureCredential()
     return mock.Mock(
         get_token=lambda *_, **__: AccessToken("secret",
                                                time.time() + 3600))
 def setUpClass(cls, credential):
     credential.get_token = Mock(return_value=AccessToken(
         "some_token",
         _convert_datetime_to_utc_int(datetime.now().replace(
             tzinfo=TZ_UTC))))
     TestChatClient.credential = credential
 async def get_token(*_, **__):
     return AccessToken("secret", time.time() + 3600)
 def create_vault_client(self, vault_uri):
     if self.is_live:
         credential = EnvironmentCredential()
     else:
         credential = Mock(get_token=lambda _: AccessToken("fake-token", 0))
     return VaultClient(vault_uri, credential)
示例#15
0
async def test_prefers_app_service_2017_09_01():
    """When the environment is configured for both App Service versions, the credential should prefer 2017-09-01

    Support for 2019-08-01 was removed due to https://github.com/Azure/azure-sdk-for-python/issues/14670. This test
    should be removed when that support is added back.
    """

    access_token = "****"
    expires_on = 42
    expected_token = AccessToken(access_token, expires_on)
    url = "http://localhost:42/token"
    secret = "expected-secret"
    scope = "scope"

    transport = async_validating_transport(
        requests=[
            Request(
                url,
                method="GET",
                required_headers={
                    "secret": secret,
                    "User-Agent": USER_AGENT
                },
                required_params={
                    "api-version": "2017-09-01",
                    "resource": scope
                },
            )
        ] * 2,
        responses=[
            mock_response(
                json_payload={
                    "access_token": access_token,
                    "expires_on": "01/01/1970 00:00:{} +00:00".format(
                        expires_on),  # linux format
                    "resource": scope,
                    "token_type": "Bearer",
                }),
            mock_response(
                json_payload={
                    "access_token": access_token,
                    "expires_on": "1/1/1970 12:00:{} AM +00:00".format(
                        expires_on),  # windows format
                    "resource": scope,
                    "token_type": "Bearer",
                }),
        ],
    )

    with mock.patch.dict(
            MANAGED_IDENTITY_ENVIRON,
        {
            EnvironmentVariables.IDENTITY_ENDPOINT: url,
            EnvironmentVariables.IDENTITY_HEADER: secret,
            EnvironmentVariables.MSI_ENDPOINT: url,
            EnvironmentVariables.MSI_SECRET: secret,
        },
            clear=True,
    ):
        credential = ManagedIdentityCredential(transport=transport)
        token = await credential.get_token(scope)
        assert token == expected_token
        assert token.expires_on == expires_on

        credential = ManagedIdentityCredential(transport=transport)
        token = await credential.get_token(scope)
        assert token == expected_token
        assert token.expires_on == expires_on
示例#16
0
except ImportError:  # python < 3.3
    from mock import Mock, patch  # type: ignore

import pytest
import time


def _convert_datetime_to_utc_int(input):
    epoch = time.mktime(datetime(1970, 1, 1).timetuple())
    input_datetime_as_int = epoch - time.mktime(input.timetuple())
    return input_datetime_as_int


credential = Mock()
credential.get_token = Mock(return_value=AccessToken(
    "some_token",
    _convert_datetime_to_utc_int(datetime.now().replace(tzinfo=TZ_UTC))))


@pytest.mark.asyncio
async def test_create_chat_thread():
    thread_id = "19:[email protected]"

    async def mock_send(*_, **__):
        return mock_response(
            status_code=201,
            json_payload={
                "chatThread": {
                    "id":
                    thread_id,
                    "topic":
示例#17
0
async def test_app_service_2017_09_01():
    """test parsing of App Service MSI 2017-09-01's eccentric platform-dependent expires_on strings"""

    access_token = "****"
    expires_on = 42
    expected_token = AccessToken(access_token, expires_on)
    url = "http://localhost:42/token"
    secret = "expected-secret"
    scope = "scope"

    transport = async_validating_transport(
        requests=[
            Request(
                url,
                method="GET",
                required_headers={
                    "secret": secret,
                    "User-Agent": USER_AGENT
                },
                required_params={
                    "api-version": "2017-09-01",
                    "resource": scope
                },
            )
        ] * 2,
        responses=[
            mock_response(
                json_payload={
                    "access_token": access_token,
                    "expires_on": "01/01/1970 00:00:{} +00:00".format(
                        expires_on),  # linux format
                    "resource": scope,
                    "token_type": "Bearer",
                }),
            mock_response(
                json_payload={
                    "access_token": access_token,
                    "expires_on": "1/1/1970 12:00:{} AM +00:00".format(
                        expires_on),  # windows format
                    "resource": scope,
                    "token_type": "Bearer",
                }),
        ],
    )

    with mock.patch.dict(
            MANAGED_IDENTITY_ENVIRON,
        {
            EnvironmentVariables.MSI_ENDPOINT: url,
            EnvironmentVariables.MSI_SECRET: secret
        },
            clear=True,
    ):
        token = await ManagedIdentityCredential(transport=transport
                                                ).get_token(scope)
        assert token == expected_token
        assert token.expires_on == expires_on

        token = await ManagedIdentityCredential(transport=transport
                                                ).get_token(scope)
        assert token == expected_token
        assert token.expires_on == expires_on
async def mock_get_token():
    return AccessToken(
        "some_token",
        _convert_datetime_to_utc_int(datetime.now().replace(tzinfo=TZ_UTC)))
 def __init__(self):
     self.token = AccessToken("YOU SHALL NOT PASS", 0)
     self.get_token_count = 0
示例#20
0
 def get_token(self, *scopes, **kwargs):
     return AccessToken("dummytoken", 0)
示例#21
0
 def get_token(*_, **__):
     return AccessToken(token, 0)
示例#22
0
 def get_token(self, *scopes, **kwargs):
     r = requests.post(AUTHSERVER + "/oauth2/v2.0/token")
     access_token = r.json()["access_token"]
     return AccessToken(access_token, 1)
示例#23
0
 def get_token(self, *scopes, **kwargs):
     from azure.core.credentials import AccessToken
     return AccessToken("fake-token", 0)
示例#24
0
    def get_token(self, *scopes, **kwargs):
        # type: (*str, **Any) -> AccessToken
        """Request an access token for `scopes`.

        This method is called automatically by Azure SDK clients.

        :param str scopes: desired scopes for the access token. This method requires at least one scope.
        :keyword str claims: additional claims required in the token, such as those returned in a resource provider's
          claims challenge following an authorization failure
        :keyword str tenant_id: optional tenant to include in the token request. If **allow_multitenant_authentication**
            is False, specifying a tenant with this argument may raise an exception.

        :rtype: :class:`azure.core.credentials.AccessToken`

        :raises CredentialUnavailableError: the credential is unable to attempt authentication because it lacks
            required data, state, or platform support
        :raises ~azure.core.exceptions.ClientAuthenticationError: authentication failed. The error's ``message``
            attribute gives a reason.
        :raises AuthenticationRequiredError: user interaction is necessary to acquire a token, and the credential is
            configured not to begin this automatically. Call :func:`authenticate` to begin interactive authentication.
        """
        if not scopes:
            message = "'get_token' requires at least one scope"
            _LOGGER.warning("%s.get_token failed: %s", self.__class__.__name__,
                            message)
            raise ValueError(message)

        allow_prompt = kwargs.pop("_allow_prompt",
                                  not self._disable_automatic_authentication)
        try:
            token = self._acquire_token_silent(*scopes, **kwargs)
            _LOGGER.info("%s.get_token succeeded", self.__class__.__name__)
            return token
        except Exception as ex:  # pylint:disable=broad-except
            if not (isinstance(ex, AuthenticationRequiredError)
                    and allow_prompt):
                _LOGGER.warning(
                    "%s.get_token failed: %s",
                    self.__class__.__name__,
                    ex,
                    exc_info=_LOGGER.isEnabledFor(logging.DEBUG),
                )
                raise

        # silent authentication failed -> authenticate interactively
        now = int(time.time())

        try:
            result = self._request_token(*scopes, **kwargs)
            if "access_token" not in result:
                message = "Authentication failed: {}".format(
                    result.get("error_description") or result.get("error"))
                response = self._client.get_error_response(result)
                raise ClientAuthenticationError(message=message,
                                                response=response)

            # this may be the first authentication, or the user may have authenticated a different identity
            self._auth_record = _build_auth_record(result)
        except Exception as ex:  # pylint:disable=broad-except
            _LOGGER.warning(
                "%s.get_token failed: %s",
                self.__class__.__name__,
                ex,
                exc_info=_LOGGER.isEnabledFor(logging.DEBUG),
            )
            raise

        _LOGGER.info("%s.get_token succeeded", self.__class__.__name__)
        return AccessToken(result["access_token"],
                           now + int(result["expires_in"]))
示例#25
0
 async def get_token(self, *scopes: str, **kwargs: Any) -> AccessToken:  # pylint:disable=unused-argument
     """
     This method is automatically called when token is about to expire.
     """
     signature, expiry = parse_sas_credential(self._credential)
     return AccessToken(signature, expiry)
示例#26
0
 def __init__(self):
     self.token = AccessToken("Fake Token", 0)
    ChatThreadMember,
    CommunicationUserIdentifier,
)
from unittest_helpers import mock_response
from azure.core.exceptions import HttpResponseError

try:
    from unittest.mock import Mock, patch
except ImportError:  # python < 3.3
    from mock import Mock, patch  # type: ignore

import pytest

credential = Mock()
credential.get_token = Mock(
    return_value=AccessToken("some_token",
                             datetime.now().replace(tzinfo=TZ_UTC)))


@pytest.mark.asyncio
async def test_update_thread():
    thread_id = "19:[email protected]"
    raised = False

    async def mock_send(*_, **__):
        return mock_response(status_code=200)

    chat_thread_client = ChatThreadClient("https://endpoint",
                                          credential,
                                          thread_id,
                                          transport=Mock(send=mock_send))
示例#28
0
 def get_token(self, *scopes, **kwargs):  # pylint:disable=unused-argument
     # type: (str, Any) -> AccessToken
     """
     This method is automatically called when token is about to expire.
     """
     return AccessToken(self.token, self.expiry)
示例#29
0
 def get_token(self, *scopes, **kwargs):
     return AccessToken('fake_token', 2527537086)
示例#30
0
 def get_token(self, *scopes, **kwargs):  # pylint:disable=unused-argument
     self.set_token()
     return AccessToken(self.token['access_token'],
                        int(self.token['expires_on']))