/**
* 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