Authentication logo

Authentication

Community
nahid-sparktales
authentication

Establish who the caller is — session cookies, bearer tokens, refresh, and OAuth/OIDC flows — and put each where it belongs. Use when adding or changing login, logout, signup, session handling, token issuance or refresh, an identity-provider integration, or when a request arrives with a credential nobody validates. Not for deciding what an authenticated caller may then do (that is authorization), not for the login screen's design, and not for hand-rolling crypto.

Overview

Publishernahid-sparktales
Repositoryagent-dispatcher
Skill nameauthentication
Stars
58
Forks
5
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by nahid-sparktales on GitHub. Read the source before you install it.

Installation

Install the Authentication AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/nahid-sparktales/agent-dispatcher/tree/main/skills/backend/authentication
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/nahid-sparktales/agent-dispatcher.git /tmp/agent-dispatcher
mkdir -p .claude/skills
cp -r /tmp/agent-dispatcher/skills/backend/authentication .claude/skills/authentication
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Authentication in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Authentication on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Authentication is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Authentication

Authentication answers one question: who is making this request? Every answer it produces is an input to authorization, never a substitute for it. A skill that conflates the two produces an app where being logged in is the only permission that exists.

When this fires

A credential is issued, accepted, refreshed or revoked. Adding login, wiring an identity provider, introducing an API key or token, changing session lifetime or cookie flags. It does not fire for "this user should not see that" — that is authorization.

Procedure

  1. Find the mechanism that already exists before adding one. Grep for session middleware, an auth library in the dependency manifest, existing cookie names, a provider SDK, Authorization header handling. Most "add auth" tasks are "extend auth". Two parallel auth systems is how a bypass gets built.
  2. Name the client type, in writing, before any code. First-party browser app → server session with a cookie. Third-party, native or mobile client → bearer token. Service to service → client-credentials token or mutual TLS. This choice determines everything below; making it implicitly is how a browser app ends up storing a long-lived token in localStorage.
  3. Use the framework's or provider's implementation. Do not write password hashing, token signing, or an OAuth flow yourself. If passwords are stored at all, hash with a memory-hard algorithm (argon2id, scrypt, bcrypt) through a maintained library — never a bare SHA, never a homemade salt scheme. When the library's current API matters, look it up rather than recalling it; auth APIs change and a stale call silently weakens the result.
  4. Sessions: identifier from a CSPRNG, state held server-side or in a signed cookie you can invalidate. Cookie flags HttpOnly, Secure, SameSite, a scoped Path, and an explicit expiry — all four, not three. Rotate the session identifier on login and on any privilege change. Logout deletes server-side state, not just the cookie.
  5. Tokens: validate signature, issuer, audience and expiry on every request, and pin the accepted algorithm on your side — never take the algorithm from the token's own header, and reject none. Verify against the provider's published key set, fetched and cached with rotation in mind. Short access-token lifetime is the containment; a stateless token cannot be recalled once issued.
  6. Refresh and revocation are one design, not two. Keep refresh tokens in server-side state so they can be revoked, rotate them on each use, and treat reuse of a rotated token as theft: invalidate the family and force re-login. If you cannot revoke, say so plainly rather than implying you can.
  7. OAuth / OIDC: authorization code with PKCE for anything user-facing. Implicit flow and resource-owner password grant are not options. Validate state on the callback, validate nonce in the ID token, and exact-match the redirect URI against an allowlist — prefix matching is an open redirect. The client secret never reaches a browser or a shipped binary; code is exchanged for tokens server-side.
  8. Resolve identity at one choke point. Middleware turns a request into a principal or into anonymous, once. Handlers read that principal; they never parse the raw credential themselves. Scattered credential parsing guarantees one handler parses it differently.
  9. Fail closed and fail uniformly. Missing or bad credential → 401, generic message. Do not reveal whether an account exists, and keep the response shape and timing identical for unknown user and wrong password. Rate-limit and back off on credential endpoints, including password reset and token exchange.
  10. Secrets come from the environment or a secret manager. Never a committed file, never a default baked into code. Before rotating a signing key, changing a cookie name or shortening session lifetime on a running system, stop and ask — each of those logs every user out.
  11. Prove it by executing it. An auth change is verified by requests actually sent: valid credential, absent credential, malformed credential, expired credential, and the refresh path. Reading the diff is a review. Hand the proof to api-contract-verification.

Checklist

  • Existing mechanism found and extended, or its absence confirmed
  • Client type named, and the session/token choice follows from it
  • No hand-written crypto; library and its current API confirmed
  • Cookie flags set, or token validation pins issuer, audience, expiry and algorithm
  • Session identifier rotates on login and privilege change
  • Refresh tokens revocable and rotated, or the absence of revocation stated
  • OAuth: PKCE, state, nonce, exact redirect-URI match, secret server-side only
  • One resolution point; handlers read a principal, not a credential
  • Unauthenticated responses uniform, generic, rate-limited
  • Secrets out of the repository; anything that logs users out was asked about first
  • Valid, missing, malformed, expired and refresh paths executed, not reasoned about

Failure handling

  • Login works but the session does not persist — read the actual Set-Cookie on the wire before touching code. Domain, Path, Secure over plain HTTP, and SameSite on a cross-site callback account for most of these, and none of them are visible in the source.
  • Token validates in one service and not another — compare issuer, audience and clock skew before suspecting the key. Shared secrets that "work locally" usually mean validation is being skipped somewhere.
  • The provider's flow does not behave as documented — capture the exact callback parameters and error code and report them. Do not loosen redirect-URI matching, disable state checks, or skip signature verification to get past it. That is not a workaround, it is the vulnerability.
  • No way to test the provider without production credentials — say the flow is unverified and name which step is unproven. Do not report an OAuth integration as working because the code compiles.

Evidence to report

Which mechanism is in use and why that client type chose it; the cookie flags or the exact token claims validated; where identity is resolved, as a file and function; the requests actually executed and their statuses, including the failure and refresh paths; anything that could not be executed, named. "Auth added" with none of that is a claim, not evidence.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Authentication AI skill do?

Establish who the caller is — session cookies, bearer tokens, refresh, and OAuth/OIDC flows — and put each where it belongs. Use when adding or changing login, logout, signup, session handling, token issuance or refresh, an identity-provider integration, or when a request arrives with a credential nobody validates. Not for deciding what an authenticated caller may then do (that is authorization), not for the login screen's design, and not for hand-rolling crypto.

Why use Authentication on TypingMind?

Because you install it once and use it with any model. Authentication is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Authentication in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/nahid-sparktales/agent-dispatcher/tree/main/skills/backend/authentication. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Authentication?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Authentication?

As many as you like. As long as a model supports skills, you can use Authentication with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Authentication AI skill free?

Yes. It is published on GitHub by nahid-sparktales under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇