Skip to main content

AWS SSO Lite

AWS SSO Lite is a lightweight Python library that allows users to authenticate with AWS Single Sign-On (SSO) without requiring the AWS CLI. This library simplifies the process of obtaining temporary AWS credentials using SSO, making it easier to integrate SSO authentication into your Python applications.

Features

  • SSO Authentication: Authenticate with AWS SSO without needing the AWS CLI.
  • Device Authorization Flow: Implements OAuth 2.0 device authorization flow for SSO login.
  • Token Management: Automatic token caching and validation.
  • Account & Role Discovery: List available AWS accounts and roles.
  • Temporary Credentials: Retrieve temporary AWS credentials for use in your Python applications.
  • Simple Integration: Easily integrate AWS SSO authentication into your Python scripts or tools.

Installation

You can install the library from PyPI using pip:

pip install aws-sso-lite

Usage

Basic Authentication

from aws_sso_lite.sso import AWSSSO

# Initialize the SSO client
sso = AWSSSO(
    start_url="https://your-company.awsapps.com/start",
    sso_region="us-east-1"  # The region where your SSO instance is deployed
)

# Check if there's a valid cached token
if not sso.has_valid_access_token():
    # Start device authorization
    auth_response = sso.start_device_authorization()
    
    print(f"Visit: {auth_response['verificationUriComplete']}")
    print(f"Or enter code: {auth_response['userCode']} at {auth_response['verificationUri']}")
    
    # Wait for user to authorize, then create token
    result = sso.create_token(auth_response['deviceCode'])
    
    if result['status'] == 'successful':
        print("Successfully authenticated!")
    else:
        print(f"Authentication failed: {result.get('error', 'Unknown error')}")

Listing AWS Accounts and Roles

# List all available AWS accounts
accounts = sso.get_aws_accounts()
for account in accounts:
    print(f"Account: {account['accountName']} ({account['accountId']})")

# Get roles for a specific account
account_id = "123456789012"
roles = sso.get_aws_account_roles(account_id)
for role in roles:
    print(f"Role: {role['roleName']}")

# Get account ID by account name
account_id = sso.get_account_id_by_account_name("Production")

Getting boto3 Sessions (Recommended)

# Get a boto3 session directly (handles credential management automatically)
session = sso.get_boto3_session(
    account_id="123456789012",
    sso_role_name="AdministratorAccess"
)

# Use the session to create AWS service clients
s3 = session.client('s3')
ec2 = session.client('ec2', region_name='us-west-2')

# With assumed role (for cross-account access)
session = sso.get_boto3_session(
    account_id="123456789012",
    sso_role_name="AdministratorAccess",
    assumed_role_arn="arn:aws:iam::999999999999:role/CrossAccountRole"
)

Getting Temporary Credentials (Manual)

# If you need raw credentials instead of a session
credentials = sso.get_role_credentials(
    account_id="123456789012",
    role_name="AdministratorAccess"
)

# Use the credentials with boto3
import boto3

session = boto3.Session(
    aws_access_key_id=credentials['roleCredentials']['accessKeyId'],
    aws_secret_access_key=credentials['roleCredentials']['secretAccessKey'],
    aws_session_token=credentials['roleCredentials']['sessionToken']
)

# Now you can use AWS services
s3 = session.client('s3')

Legacy API (Backward Compatible)

from aws_sso_lite import do_sso_login
import botocore.session

start_url = "https://your-company.awsapps.com/start"
botocore_session = botocore.session.Session()
region = 'us-east-1'

do_sso_login(botocore_session, region, start_url)

API Reference

AWSSSO Class

__init__(start_url: str, sso_region: str)

Initialize the SSO client.

Parameters:

  • start_url: Your AWS SSO start URL (e.g., https://your-company.awsapps.com/start)
  • sso_region: The AWS region where your SSO instance is deployed (e.g., us-east-1)

start_device_authorization() -> dict

Initiates the device authorization flow.

Returns: Dictionary with deviceCode, userCode, verificationUri, and verificationUriComplete

create_token(device_code: str, store_token: bool = True) -> dict

Creates and stores an SSO access token.

Returns: Dictionary with status ("successful", "pending", or "error")

has_valid_access_token() -> bool

Checks if a valid cached access token exists.

get_aws_accounts() -> list

Lists all AWS accounts accessible via SSO.

get_aws_account_roles(account_id: str) -> list

Lists all roles available for the specified account.

get_account_id_by_account_name(account_name: str) -> str | None

Finds an account ID by account name.

get_role_credentials(account_id: str, role_name: str) -> dict

Retrieves temporary AWS credentials for a specific account and role.

get_boto3_session(account_id: str, sso_role_name: str, assumed_role_arn: str = None) -> boto3.Session

Creates a boto3 session with automatic credential management and caching.

Parameters:

  • account_id: The AWS account ID
  • sso_role_name: The SSO role name to use
  • assumed_role_arn: (Optional) ARN of a role to assume for cross-account access

Returns: A configured boto3.Session object

Note: Sessions and credentials are automatically cached and reused until they e

  • Cache keys include the access token hash, so cache is automatically invalidated when you re-authenticate.
  • The AWSSSO instance can be safely kept alive for long periods - it handles token expiration gracefully.xpire.

Caching Behavior

This library implements intelligent caching at multiple levels:

  1. SSO Tokens: Cached in ~/.aws/sso/cache/ (shared with AWS CLI)
  2. Account/Role Lists: Cached in-memory, automatically invalidated when SSO token changes
  3. boto3 Sessions: Cached in-memory with automatic expiration handling
  4. Temporary Credentials: Cached and reused until they expire

All caches are automatically invalidated when tokens expire or change, ensuring you always work with valid credentials.

Requirements

  • Python 3.7+
  • botocore
  • boto3

Notes

  • The SSO region is the region where your SSO instance is deployed, not the region where your AWS resources are located.
  • Tokens are cached in ~/.aws/sso/cache/ and are automatically reused if valid.
  • One SSO start URL can provide access to multiple AWS accounts across all regions.

Metadata

Release files for aws-sso-lite 0.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aws-sso-lite 0.0.9
File Size Uploaded
aws_sso_lite-0.0.9.tar.gz 11.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aws-sso-lite 0.0.9
File Interpreter ABI Platform
aws_sso_lite-0.0.9-py3-none-any.whl Python 3 none any Details

Total release size: 22.3 kB

Release files / aws_sso_lite-0.0.9.tar.gz

Download URL aws_sso_lite-0.0.9.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
149c0147c0b212e2fb28ceb0bf314a1d6df5472b0bec5b45d519578dd1c2f5ce
BLAKE2b-256 checksum
How to use checksums
8674b6b0542fb9bcd79ecc13357ac5252b54c4da4d899b957608f8b3ebda0a51
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / aws_sso_lite-0.0.9-py3-none-any.whl

Download URL aws_sso_lite-0.0.9-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6d4a2be54f5dcf108e762fa8ca91359735eb41bafc5b0f6e7e48319cbc60f74d
BLAKE2b-256 checksum
How to use checksums
3ccb694b7ba43b0b696a0e18932e5ee549ccafc1957ced8c35f3439d3a670d4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

This release

0.0.9 This release

2 release files

0.0.7

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page