Get social sign-in provider tokens
You can get the OIDC / OAuth 2.0 access, refresh, and ID tokens issued for the identity by social sign-in providers.
These tokens are issued only when the Identity:
- Signs up with a social sign-in provider.
- Links a new social sign-in provider to their account.
Run this command to get the Identity details that include the social sign-in provider tokens:
- Ory CLI
- cURL
- JavaScript
- Go
ory get identity "{identity.id}" --project "{project.id}" \
-i oidc --format yaml
curl --request GET -sL \
--header "Content-Type: application/json" \
--header "Authorization: Bearer {ORY_API_KEY}" \
'https://{project.slug}.projects.oryapis.com/admin/identities/<identity_id>?include_credential=oidc'
import { Configuration, IdentityApi } from "@ory/client"
const identity = new IdentityApi(
new Configuration({
basePath: `https://${process.env.ORY_PROJECT_SLUG}.projects.oryapis.com`,
accessToken: process.env.ORY_API_KEY,
}),
)
export async function getTokens(identityId: string) {
return await identity
.getIdentity({ id: identityId, includeCredential: ["oidc"] })
.then(({ data }) => data)
}
package main
import (
"context"
"fmt"
"github.com/ory/client-go"
"os"
)
var ory *client.APIClient
var authed = context.WithValue(context.Background(), client.ContextAccessToken, os.Getenv("ORY_API_KEY"))
func init() {
cfg := client.NewConfiguration()
cfg.Servers = client.ServerConfigurations{
{URL: fmt.Sprintf("https://%s.projects.oryapis.com", os.Getenv("ORY_PROJECT_SLUG"))},
}
ory = client.NewAPIClient(cfg)
}
func getTokens(identityId string) (cl client.IdentityCredentials, err error) {
identity, _, err := ory.IdentityApi.
GetIdentity(authed, identityId).
IncludeCredential([]string{"oidc"}).Execute()
if err != nil {
return cl, err
}
return (*identity.Credentials)["oidc"], nil
}
When the call is successful, the system returns the Identity details with the available social sign-in provider tokens:
{
"id": "IDENTITY_ID",
"credentials": {
"oidc": {
"type": "oidc",
"identifiers": [
"google:some-user"
"github:another-user"
],
"config": {
"providers": [
{
"subject": "some-user",
"provider": "google",
"initial_access_token": "********************",
"initial_refresh_token": "********************",
"initial_id_token": "********************",
},
{
"subject": "another-user",
"provider": "github",
"initial_access_token": "********************",
"initial_refresh_token": "********************",
"initial_id_token": "********************",
}
]
},
"created_at": "2022-10-08T12:17:18.834351+02:00",
"updated_at": "2022-10-08T12:17:18.834351+02:00"
}
},
"schema_id": "default",
"schema_url": "SCHEMA_URL",
"state": "active",
"state_changed_at": "2022-10-08T12:17:18.83324+02:00",
"traits": {
"subject": "foo.oidc@bar.com"
},
"verifiable_addresses": [
{
"id": "88da96df-0457-4d69-832d-5e70ef25055c",
"value": "foo.oidc@bar.com",
"verified": false,
"via": "",
"status": "",
"verified_at": null,
"created_at": "2022-10-08T12:17:18.83324+02:00",
"updated_at": "2022-10-08T12:17:18.834202+02:00"
}
],
"created_at": "2022-10-08T12:17:18.834043+02:00",
"updated_at": "2022-10-08T12:17:18.834043+02:00"
}
Encryption
The Ory Network encrypts these tokens per default at rest using XChaCha20 Poly1305.