contributing/workflow_samples/auth_oauth/README.md
This sample demonstrates how to use AuthConfig with GitHub OAuth2 on a FunctionNode in a workflow. It shows how to pause execution to request a GitHub OAuth token from the user and then use that token to list the user's owned repositories via the GitHub API.
To run this sample and actually log in, you need to:
http://localhost:8000 if running locally).export GITHUB_CLIENT_ID="your_actual_client_id"
export GITHUB_CLIENT_SECRET="your_actual_client_secret"
.env file in the sample directory (contributing/workflow_samples/auth_oauth/.env) with the following content:
GITHUB_CLIENT_ID="your_actual_client_id"
GITHUB_CLIENT_SECRET="your_actual_client_secret"
.env files from the agent directory.graph TD
START --> list_github_repos
list_github_repos --> display_result
We define an AuthConfig that specifies the GitHub OAuth2 endpoints and reads credentials from environment variables.
auth_config = AuthConfig(
auth_scheme=OAuth2(
flows=OAuthFlows(
authorizationCode=OAuthFlowAuthorizationCode(
authorizationUrl="https://github.com/login/oauth/authorize",
tokenUrl="https://github.com/login/oauth/access_token",
scopes={
"user": "Read user profile",
"repo": "Access public repositories",
},
)
)
),
raw_auth_credential=AuthCredential(
auth_type=AuthCredentialTypes.OAUTH2,
oauth2=OAuth2Auth(
client_id=os.environ.get("GITHUB_CLIENT_ID", "YOUR_GITHUB_CLIENT_ID"),
client_secret=os.environ.get("GITHUB_CLIENT_SECRET", "YOUR_GITHUB_CLIENT_SECRET"),
),
),
credential_key="github_oauth_token",
)
We apply the auth_config to the list_github_repos node.
@node(auth_config=auth_config, rerun_on_resume=True)
def list_github_repos(ctx: Context):
# ...
Inside the node, we retrieve the token and use the requests library to call the GitHub API.
cred = ctx.get_auth_response(auth_config)
access_token = cred.oauth2.access_token if cred and cred.oauth2 else None
# ... (headers setup) ...
response = requests.get("https://api.github.com/user/repos", headers=headers)
repos_data = response.json()
repo_names = [repo["name"] for repo in repos_data]
To run this sample interactively, use the ADK CLI:
adk run contributing/workflow_samples/auth_oauth
Or use the Web UI:
adk web contributing/workflow_samples/