> ## Documentation Index
> Fetch the complete documentation index at: https://docs.turnkey.com/llms.txt
> Use this file to discover all available pages before exploring further.

# loginWithOauth()

export const NestedParam = ({parentKey, childKey, type, required, description, children}) => {
  const fullKey = `${parentKey}.${childKey}`;
  const anchorId = `body-${fullKey.replace(/\./g, '-')}`;
  return <div className="py-6 border-gray-100 dark:border-gray-800 border-b last:border-b-0">
  <div className="flex font-mono text-sm group/param-head param-head break-all relative" id={anchorId}>
    <div className="flex-1 flex content-start py-0.5 mr-5">
      <div className="flex items-center flex-wrap gap-2">
        <div className="absolute -top-1.5">
          <a href={`#${anchorId}`} className="-ml-[2.1rem] flex items-center opacity-0 border-0 group-hover/param-head:opacity-100 py-2 [.expandable-content_&]:-ml-[2.1rem]" aria-label="Navigate to header">
            <div className="w-6 h-6 text-gray-400 rounded-md flex items-center justify-center zinc-box bg-white ring-1 ring-gray-400/30 dark:ring-gray-700/25 hover:ring-gray-400/60 dark:hover:ring-white/20">
              <svg xmlns="http://www.w3.org/2000/svg" fill="gray" height="12px" viewBox="0 0 576 512">
                <path d="M0 256C0 167.6 71.6 96 160 96h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C98.1 144 48 194.1 48 256s50.1 112 112 112h72c13.3 0 24 10.7 24 24s-10.7 24-24 24H160C71.6 416 0 344.4 0 256zm576 0c0 88.4-71.6 160-160 160H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c61.9 0 112-50.1 112-112s-50.1-112-112-112H344c-13.3 0-24-10.7-24-24s10.7-24 24-24h72c88.4 0 160 71.6 160 160zM184 232H392c13.3 0 24 10.7 24 24s-10.7 24-24 24H184c-13.3 0-24-10.7-24-24s10.7-24 24-24z"></path>
              </svg>
            </div>
          </a>
        </div>
        <div className="font-semibold text-primary dark:text-primary-light cursor-pointer overflow-wrap-anywhere">
          <span className="text-gray-500 dark:text-gray-400">{parentKey}.</span>
          {childKey}
        </div>
        <div className="inline items-center gap-2 text-xs font-medium [&_div]:inline [&_div]:mr-2 [&_div]:leading-5">
          <div className="flex items-center px-2 py-0.5 rounded-md bg-gray-100/50 dark:bg-white/5 text-gray-600 dark:text-gray-200 font-medium break-all">
            <span>{type}</span>
          </div>
          {required && <span className="px-2 py-0.5 rounded-md bg-red-100/50 dark:bg-red-400/10 text-red-600 dark:text-red-300 font-medium whitespace-nowrap">
              required
            </span>}
        </div>
      </div>
    </div>
  </div>
  {children && <div className="mt-4">
      <div className="prose prose-sm prose-gray dark:prose-invert">
        {children}
      </div>
    </div>}
</div>;
};

export const H3Bordered = ({text}) => <h3 id={text.toLowerCase()} className="border-b pb-2.5 border-gray-100 dark:border-gray-800">
    {text}
  </h3>;

<H3Bordered text="Overview" />

Logs in a user using OAuth authentication.

<ul>
  <li>This function logs in a user using the provided OIDC token and public key.</li>
  <li>Optionally invalidates any existing sessions for the user if `invalidateExisting` is set to true.</li>
  <li>Stores the resulting session token under the specified session key, or the default session key if not provided.</li>
  <li>Handles cleanup of unused key pairs if login fails.</li>
</ul>

<p><strong>Package:</strong> <code>core</code></p>

<p><strong>Defined in:</strong> <a href="https://github.com/tkhq/sdk/blob/v2026.3.1/packages/core/src/__clients__/core.ts#L1763">**clients**/core.ts:1763</a></p>

<H3Bordered text="Parameters" />

<ParamField body="params" type="LoginWithOauthParams" required={true}>
  <Expandable title="params details">
    <NestedParam parentKey="params" childKey="invalidateExisting" type="boolean" required={false}>
      flag to invalidate existing sessions for the user.
    </NestedParam>

    <NestedParam parentKey="params" childKey="oidcToken" type="string" required={true}>
      OIDC token received after successful authentication with the OAuth provider.
    </NestedParam>

    <NestedParam parentKey="params" childKey="organizationId" type="string" required={false}>
      ID of the organization to target when creating the session.
    </NestedParam>

    <NestedParam parentKey="params" childKey="publicKey" type="string" required={true}>
      The public key bound to the login session. This key is required because it is directly
      tied to the nonce used during OIDC token generation and must match the value
      encoded in the token.
    </NestedParam>

    <NestedParam parentKey="params" childKey="sessionKey" type="string" required={false}>
      session key to use for session creation (defaults to the default session key).
    </NestedParam>
  </Expandable>
</ParamField>

<H3Bordered text="Response" />

A successful response returns the following fields:

<ResponseField name="returns" type="BaseAuthResult" required={true}>
  A promise that resolves to a BaseAuthResult, which includes:

  * `sessionToken`: the signed JWT session token.
</ResponseField>
