/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include #include #include #include namespace Aws { namespace SSOOIDC { /** *

AWS IAM Identity Center (successor to AWS Single Sign-On) OpenID Connect * (OIDC) is a web service that enables a client (such as AWS CLI or a native * application) to register with IAM Identity Center. The service also enables the * client to fetch the user’s access token upon successful authentication and * authorization with IAM Identity Center.

Although AWS Single * Sign-On was renamed, the sso and identitystore API * namespaces will continue to retain their original name for backward * compatibility purposes. For more information, see IAM * Identity Center rename.

Considerations for Using This * Guide

Before you begin using this guide, we recommend that you first * review the following important information about how the IAM Identity Center * OIDC service works.

  • The IAM Identity Center OIDC service * currently implements only the portions of the OAuth 2.0 Device Authorization * Grant standard (https://tools.ietf.org/html/rfc8628) * that are necessary to enable single sign-on authentication with the AWS CLI. * Support for other OIDC flows frequently needed for native applications, such as * Authorization Code Flow (+ PKCE), will be addressed in future releases.

    *
  • The service emits only OIDC access tokens, such that obtaining a * new token (For example, token refresh) requires explicit user * re-authentication.

  • The access tokens provided by this service * grant access to all AWS account entitlements assigned to an IAM Identity Center * user, not just a particular application.

  • The documentation in * this guide does not describe the mechanism to convert the access token into AWS * Auth (“sigv4”) credentials for use with IAM-protected AWS service endpoints. For * more information, see GetRoleCredentials * in the IAM Identity Center Portal API Reference Guide.

*

For general information about IAM Identity Center, see What * is IAM Identity Center? in the IAM Identity Center User Guide.

*/ class AWS_SSOOIDC_API SSOOIDCClient : public Aws::Client::AWSJsonClient, public Aws::Client::ClientWithAsyncTemplateMethods { public: typedef Aws::Client::AWSJsonClient BASECLASS; static const char* SERVICE_NAME; static const char* ALLOCATION_TAG; typedef SSOOIDCClientConfiguration ClientConfigurationType; typedef SSOOIDCEndpointProvider EndpointProviderType; /** * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SSOOIDCClient(const Aws::SSOOIDC::SSOOIDCClientConfiguration& clientConfiguration = Aws::SSOOIDC::SSOOIDCClientConfiguration(), std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG)); /** * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SSOOIDCClient(const Aws::Auth::AWSCredentials& credentials, std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG), const Aws::SSOOIDC::SSOOIDCClientConfiguration& clientConfiguration = Aws::SSOOIDC::SSOOIDCClientConfiguration()); /** * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied, * the default http client factory will be used */ SSOOIDCClient(const std::shared_ptr& credentialsProvider, std::shared_ptr endpointProvider = Aws::MakeShared(ALLOCATION_TAG), const Aws::SSOOIDC::SSOOIDCClientConfiguration& clientConfiguration = Aws::SSOOIDC::SSOOIDCClientConfiguration()); /* Legacy constructors due deprecation */ /** * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SSOOIDCClient(const Aws::Client::ClientConfiguration& clientConfiguration); /** * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config * is not specified, it will be initialized to default values. */ SSOOIDCClient(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration); /** * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied, * the default http client factory will be used */ SSOOIDCClient(const std::shared_ptr& credentialsProvider, const Aws::Client::ClientConfiguration& clientConfiguration); /* End of legacy constructors due deprecation */ virtual ~SSOOIDCClient(); /** *

Creates and returns an access token for the authorized client. The access * token issued will be used to fetch short-term credentials for the assigned roles * in the AWS account.

See Also:

AWS * API Reference

*/ virtual Model::CreateTokenOutcome CreateToken(const Model::CreateTokenRequest& request) const; /** * A Callable wrapper for CreateToken that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::CreateTokenOutcomeCallable CreateTokenCallable(const CreateTokenRequestT& request) const { return SubmitCallable(&SSOOIDCClient::CreateToken, request); } /** * An Async wrapper for CreateToken that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void CreateTokenAsync(const CreateTokenRequestT& request, const CreateTokenResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SSOOIDCClient::CreateToken, request, handler, context); } /** *

Registers a client with IAM Identity Center. This allows clients to initiate * device authorization. The output should be persisted for reuse through many * authentication requests.

See Also:

AWS * API Reference

*/ virtual Model::RegisterClientOutcome RegisterClient(const Model::RegisterClientRequest& request) const; /** * A Callable wrapper for RegisterClient that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::RegisterClientOutcomeCallable RegisterClientCallable(const RegisterClientRequestT& request) const { return SubmitCallable(&SSOOIDCClient::RegisterClient, request); } /** * An Async wrapper for RegisterClient that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void RegisterClientAsync(const RegisterClientRequestT& request, const RegisterClientResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SSOOIDCClient::RegisterClient, request, handler, context); } /** *

Initiates device authorization by requesting a pair of verification codes * from the authorization service.

See Also:

AWS * API Reference

*/ virtual Model::StartDeviceAuthorizationOutcome StartDeviceAuthorization(const Model::StartDeviceAuthorizationRequest& request) const; /** * A Callable wrapper for StartDeviceAuthorization that returns a future to the operation so that it can be executed in parallel to other requests. */ template Model::StartDeviceAuthorizationOutcomeCallable StartDeviceAuthorizationCallable(const StartDeviceAuthorizationRequestT& request) const { return SubmitCallable(&SSOOIDCClient::StartDeviceAuthorization, request); } /** * An Async wrapper for StartDeviceAuthorization that queues the request into a thread executor and triggers associated callback when operation has finished. */ template void StartDeviceAuthorizationAsync(const StartDeviceAuthorizationRequestT& request, const StartDeviceAuthorizationResponseReceivedHandler& handler, const std::shared_ptr& context = nullptr) const { return SubmitAsync(&SSOOIDCClient::StartDeviceAuthorization, request, handler, context); } void OverrideEndpoint(const Aws::String& endpoint); std::shared_ptr& accessEndpointProvider(); private: friend class Aws::Client::ClientWithAsyncTemplateMethods; void init(const SSOOIDCClientConfiguration& clientConfiguration); SSOOIDCClientConfiguration m_clientConfiguration; std::shared_ptr m_executor; std::shared_ptr m_endpointProvider; }; } // namespace SSOOIDC } // namespace Aws