> ## Documentation Index
> Fetch the complete documentation index at: https://litprotocol-feat-rusk-sdk.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Discord (SSO)

> Discord Authentication uses your Discord account to authenticate via the Lit Login Server or your own Login Server. This can be used to mint a PKP and then sign messages.

# Prerequisites

<Note>
  Lit Login Server & Lit Auth Server URLs. Please refer to [Auth Services](/sdk/getting-started/auth-services#naga-dev-network) section.
</Note>

<Steps>
  <Step title="Sign in with Discord">
    To sign in with Discord, you can use the `authenticate` function provided by the DiscordAuthenticator.

    ```ts theme={null}
    import { DiscordAuthenticator } from "@lit-protocol/auth";

    const authData = await DiscordAuthenticator.authenticate(
      "https://login.litgateway.com"
    );
    ```
  </Step>

  <Step title="Get or Mint a PKP">
    You can select an existing PKP associated with your account or mint a new one.

    <CodeGroup>
      ```ts Mint a fresh PKP theme={null}
      const res = await litClient.authService.mintWithAuth({
        authData: authData,
      });
      ```

      ```ts Using an existing PKP theme={null}
      const result = await litClient.viewPKPsByAuthData({
        authData: {
          authMethodType: authData.authMethodType,
          authMethodId: authData.authMethodId,
        },
        pagination: {
          limit: 5,
          offset: 0,
        }
      });
      ```
    </CodeGroup>
  </Step>

  <Step title="Generate Auth Context">
    Use your PKP's public key to create an AuthContext. This method will cache two things:

    1. session key pair - a temporary cryptographic key pair generated on the client side that acts as a temporary identity for the client application. It consists of:
       * A public key - shared with the Lit nodes
       * A secret key (private key) - kept securely on the client
    2. Delegation AuthSig aka. the inner auth sig - a cryptographic attestation from the Lit Protocol nodes that authorises your session key to act on behalf of your PKP.

    ```ts theme={null}

    const authContext = await authManager.createPkpAuthContext({
      authData: authData, // <-- Retrieved earlier
      pkpPublicKey: pkpInfo.pubkey,
      authConfig: {
        resources: [
          ["pkp-signing", "*"],
          ["lit-action-execution", "*"],
        ],
        expiration: new Date(Date.now() + 1000 * 60 * 60 * 24).toISOString(),
        statement: "",
        domain: window.location.origin,
      },
      litClient: litClient,
    });
    ```
  </Step>
</Steps>
