Method
Sources and method
What every page is written from, how claims are checked, and the published test vectors the tools are tested against on every build.
How pages are written
Each page starts from the primary document: the NIST Special Publication, the IETF RFC, the OpenID Foundation, OASIS or W3C specification. Requirements are paraphrased in our own words and checked line by line against that text; brief quotations are marked as quotations and linked to the section they come from. Practices that are widespread but not required by any standard are labelled as common practice.
Every page shows the date it was last checked against its sources. Standards move: NIST SP 800-63B-4 (July 2025) replaced the 2017 edition, RFC 9700 (January 2025) updated OAuth's security advice, and OAuth 2.1 is still an Internet-Draft. When a source is revised, the pages that cite it are re-checked and their review date changes.
The site is vendor-neutral. It names protocols, standards bodies and government guidance, and describes product categories generically. It carries no sponsorship, advertising or affiliate links.
Requirement words
NIST and IETF documents use specific words for requirements, and the difference matters. This site keeps them:
| Word | Meaning | Defined in |
|---|---|---|
| SHALL / MUST | A requirement. SHALL NOT and MUST NOT are prohibitions. | NIST SP 800-63-4 conventions; RFC 2119 and RFC 8174 |
| SHOULD | A recommendation: there may be valid reasons to do otherwise, but the implications must be understood. | Same |
| MAY | Permitted, optional. | Same |
Tool validation
The tools' code is the same file in your browser and in the build. Before the site is published, gen/test_tools.js runs that code under Node.js (WebCrypto) against the published examples below; if any check fails, the build stops and the previous version stays online. Last run 2026-11-02 on Node v20.19.2: 37 of 37 passed.
| Area | Check | Result |
|---|---|---|
| JWS signature | RFC 7515 Appendix A.1.: HS256 verifies | Pass |
| JWS signature | RFC 7515 Appendix A.1.: altered payload is rejected | Pass |
| JWS signature | RFC 7515 Appendix A.2.: RS256 verifies | Pass |
| JWS signature | RFC 7515 Appendix A.2.: altered payload is rejected | Pass |
| JWS signature | RFC 7515 Appendix A.2.: key found in a JWK Set | Pass |
| JWS signature | RFC 7515 Appendix A.3.: ES256 verifies | Pass |
| JWS signature | RFC 7515 Appendix A.3.: altered payload is rejected | Pass |
| JWS signature | RFC 7515 Appendix A.3.: key found in a JWK Set | Pass |
| JWS signature | RFC 7515 Appendix A.4.: ES512 verifies | Pass |
| JWS signature | RFC 7515 Appendix A.4.: altered payload is rejected | Pass |
| JWS signature | RFC 7515 Appendix A.4.: key found in a JWK Set | Pass |
| JWS signature | RFC 8037 Appendix A.4: EdDSA verifies | Pass |
| JWS signature | RFC 8037 Appendix A.4: altered payload is rejected | Pass |
| JWS signature | RFC 8037 Appendix A.4: key found in a JWK Set | Pass |
| JWT decoding | RFC 7519 §3.1 example: iss=joe, exp=1300819380, is_root=true | Pass |
| JWT analysis | Expired example token is flagged as expired | Pass |
| JWT analysis | alg none is flagged | Pass |
| JWT analysis | case variant of none is flagged | Pass |
| JWT analysis | duplicate claim names are flagged | Pass |
| JWT analysis | DER-encoded ES256 signature is flagged | Pass |
| JWT analysis | RSA key offered for an HS256 token is refused (algorithm confusion) | Pass |
| JWT analysis | key marked for a different alg is refused | Pass |
| JWT decoding | JWE (5 parts) is recognised, payload not decoded | Pass |
| JWT decoding | invalid base64url is reported | Pass |
| PKCE | RFC 7636 Appendix B: S256(verifier) = published code_challenge | Pass |
| PKCE | generated verifier is 43 unreserved characters | Pass |
| PKCE | verifier shorter than 43 characters is rejected | Pass |
| Password policy | legacy preset fails exactly the expected SHALL/SHOULD rules | Pass |
| Password policy | conformant preset: no failures, nothing unanswered | Pass |
| Password policy | every rule in pwrules.json has logic | Pass |
| Password policy | 8 characters passes only when used with MFA | Pass |
| Password policy | 101 failed attempts exceeds the limit; 100 is allowed | Pass |
| Password policy | length counts code points after NFC (e+combining acute → é; emoji = 1) | Pass |
| SAML decoding | HTTP-Redirect URL: URL-decode, base64, inflate → original XML | Pass |
| SAML decoding | HTTP-POST value: base64 → original XML | Pass |
| SAML decoding | form body SAMLResponse=… is unwrapped | Pass |
| SAML decoding | garbage input gives an error, not a crash | Pass |
Example tokens and keys are extracted programmatically from the RFC text (RFC 7515 Appendix A.1–A.4, RFC 8037 Appendix A.4, RFC 7636 Appendix B) so a copying mistake cannot make a check pass. The SAML decoder's XML analysis needs a browser DOM and is checked in headless Chrome separately; XML signatures are listed, never claimed as verified.
Standards watch
Every week the site checks whether the documents it depends on have moved: a new revision of an Internet-Draft, a draft published as an RFC, a NIST publication superseded or withdrawn, a W3C specification changing maturity. A change puts the pages that cite the document back in the review queue.
| Document | Status | Checked |
|---|---|---|
| OAuth 2.0 for Browser-Based Applications draft-ietf-oauth-browser-based-apps | Internet-Draft, revision -27 (2026-08-21) | |
| The OAuth 2.1 Authorization Framework draft-ietf-oauth-v2-1 | Internet-Draft, revision -17 (2026-10-31) changed since review | |
| SP 800-207 | Final, current | |
| SP 800-53 Rev. 5 | Final, current | |
| SP 800-63-4 | Final, current | |
| SP 800-63B-4 | Final, current | |
| SP 800-63C-4 | Final, current | |
| WebAuthn Level 3 | W3C Recommendation |
Licences
- NIST and CISA publications: works of the U.S. government, not subject to copyright in the United States.
- IETF RFCs: brief quotations with attribution, as the IETF Trust Legal Provisions allow.
- OpenID Foundation, OASIS (SAML) and W3C (WebAuthn) specifications: cited and linked, with brief attributed quotations only.
- FIDO Alliance, OWASP and other sites: cited for facts and linked; not reproduced.
- Diagrams and illustrations: original to this site. Example tokens are the RFCs' own published examples; example hosts use reserved
example.com-style names.
Every source cited
CERT Coordination Center
- VU#475445: Multiple SAML libraries may allow authentication bypass via incorrect XML canonicalization and DOM traversal Cited for facts; not reproduced
Cited on: SAML decoder
CISA
- CISA fact sheet: Implementing Number Matching in MFA Applications (October 2022) Public domain (U.S. government work)
Cited on: OTP and push authentication - CISA fact sheet: Implementing Phishing-Resistant MFA (October 2022) Public domain (U.S. government work)
Cited on: Privileged accounts, MFA strength compared, Phishing-resistant MFA, WebAuthn, OTP and push authentication, Least-privilege checklist builder
FIDO Alliance
- FIDO Alliance: Passkeys Cited for facts; not reproduced
Cited on: Passkeys
IETF
- RFC 4226: HOTP: An HMAC-Based One-Time Password Algorithm IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OTP and push authentication - RFC 6238: TOTP: Time-Based One-Time Password Algorithm IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OTP and push authentication - RFC 6749: The OAuth 2.0 Authorization Framework IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth 2.0, Authorization code flow with PKCE, Client credentials grant, Device authorization grant, Access, refresh and ID tokens, Scopes and consent, OpenID Connect, OAuth security mistakes (RFC 9700), OAuth, OpenID Connect and SAML compared, OAuth flow visualiser - RFC 6750: The OAuth 2.0 Authorization Framework: Bearer Token Usage IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth 2.0, Access, refresh and ID tokens, Scopes and consent, OAuth flow visualiser - RFC 7009: OAuth 2.0 Token Revocation IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Access, refresh and ID tokens - RFC 7515: JSON Web Signature (JWS) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JSON Web Tokens (JWT), JWT decoder and inspector - RFC 7516: JSON Web Encryption (JWE) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JSON Web Tokens (JWT) - RFC 7517: JSON Web Key (JWK) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JSON Web Tokens (JWT) - RFC 7518: JSON Web Algorithms (JWA) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JSON Web Tokens (JWT), JWT decoder and inspector - RFC 7519: JSON Web Token (JWT) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JSON Web Tokens (JWT), OpenID Connect, Sender-constrained tokens: DPoP and mTLS, JWT decoder and inspector - RFC 7523: JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Service accounts and secrets, Client credentials grant - RFC 7636: Proof Key for Code Exchange by OAuth Public Clients IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Authorization code flow with PKCE, OAuth security mistakes (RFC 9700), OAuth flow visualiser - RFC 7662: OAuth 2.0 Token Introspection IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Access, refresh and ID tokens - RFC 8037: CFRG Elliptic Curve Diffie-Hellman (ECDH) and Signatures in JOSE IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JWT decoder and inspector - RFC 8252: OAuth 2.0 for Native Apps IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth 2.0, Authorization code flow with PKCE - RFC 8414: OAuth 2.0 Authorization Server Metadata IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth 2.0, OAuth security mistakes (RFC 9700) - RFC 8628: OAuth 2.0 Device Authorization Grant IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Device authorization grant, OAuth flow visualiser - RFC 8693: OAuth 2.0 Token Exchange IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Service accounts and secrets - RFC 8705: OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Client credentials grant, OAuth security mistakes (RFC 9700), Sender-constrained tokens: DPoP and mTLS - RFC 8707: Resource Indicators for OAuth 2.0 IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Client credentials grant, Scopes and consent - RFC 8725: JSON Web Token Best Current Practices IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: JSON Web Tokens (JWT), JWT decoder and inspector - RFC 9068: JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Client credentials grant, Access, refresh and ID tokens, Scopes and consent, JSON Web Tokens (JWT), JWT decoder and inspector - RFC 9126: OAuth 2.0 Pushed Authorization Requests IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Authorization code flow with PKCE - RFC 9207: OAuth 2.0 Authorization Server Issuer Identification IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: Authorization code flow with PKCE, OAuth security mistakes (RFC 9700), OAuth flow visualiser - RFC 9449: OAuth 2.0 Demonstrating Proof of Possession (DPoP) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth security mistakes (RFC 9700), Sender-constrained tokens: DPoP and mTLS - RFC 9700: Best Current Practice for OAuth 2.0 Security IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth 2.0, Authorization code flow with PKCE, Client credentials grant, Device authorization grant, Access, refresh and ID tokens, Scopes and consent, OpenID Connect, OAuth security mistakes (RFC 9700), Sender-constrained tokens: DPoP and mTLS, OAuth, OpenID Connect and SAML compared, OAuth flow visualiser - The OAuth 2.1 Authorization Framework, draft-ietf-oauth-v2-1-16 (Internet-Draft, work in progress) IETF Trust Legal Provisions (brief quotations with attribution)
Cited on: OAuth 2.0, Authorization code flow with PKCE, Scopes and consent
NIST
- NIST SP 800-207: Zero Trust Architecture Public domain (U.S. government work)
Cited on: Least privilege, Just-in-time access, Service accounts and secrets, Zero trust - NIST SP 800-53 Rev. 5: Security and Privacy Controls for Information Systems and Organizations Public domain (U.S. government work)
Cited on: Least privilege, Privileged accounts, Just-in-time access, Break-glass accounts, Service accounts and secrets, Access reviews, NIST password rules - NIST SP 800-53 Rev. 5: Security and Privacy Controls for Information Systems and Organizations Public domain (U.S. government work)
Cited on: Least-privilege checklist builder - NIST SP 800-63-4: Digital Identity Guidelines Public domain (U.S. government work)
Cited on: Privileged accounts, Assurance levels: IAL, AAL, FAL - NIST SP 800-63B (2017): Authentication and Lifecycle Management (superseded) Public domain (U.S. government work)
Cited on: NIST password rules, Assurance levels: IAL, AAL, FAL - NIST SP 800-63B (June 2017, superseded) Public domain (U.S. government work)
Cited on: Password policy checker - NIST SP 800-63B-4: Authentication and Authenticator Management Public domain (U.S. government work)
Cited on: MFA strength compared, Phishing-resistant MFA, Passkeys, WebAuthn, NIST password rules, Assurance levels: IAL, AAL, FAL, OTP and push authentication, Account recovery - NIST SP 800-63B-4: Digital Identity Guidelines, Authentication and Authenticator Management (July 2025) Public domain (U.S. government work)
Cited on: Password policy checker - NIST SP 800-63C-4: Digital Identity Guidelines, Federation and Assertions Public domain (U.S. government work)
Cited on: SAML 2.0, OAuth, OpenID Connect and SAML compared - NIST SP 800-63C-4: Federation and Assertions Public domain (U.S. government work)
Cited on: Assurance levels: IAL, AAL, FAL
OASIS
- Assertions and Protocols for the OASIS Security Assertion Markup Language (SAML) V2.0 OASIS specification (cited, brief quotations)
Cited on: SAML 2.0, SAML decoder - Bindings for the OASIS Security Assertion Markup Language (SAML) V2.0 OASIS specification (cited, brief quotations)
Cited on: SAML 2.0, SAML decoder - Profiles for the OASIS Security Assertion Markup Language (SAML) V2.0 OASIS specification (cited, brief quotations)
Cited on: SAML 2.0, OAuth, OpenID Connect and SAML compared, SAML decoder - SAML V2.0 Errata 05 OASIS specification (cited, brief quotations)
Cited on: SAML 2.0, OAuth, OpenID Connect and SAML compared - SAML Version 2.0 Errata 05 OASIS specification (cited, brief quotations)
Cited on: SAML decoder
Office of Management and Budget
- OMB M-22-09: Moving the U.S. Government Toward Zero Trust Cybersecurity Principles Public domain (U.S. government work)
Cited on: Just-in-time access, Break-glass accounts, Zero trust, Phishing-resistant MFA, NIST password rules, Account recovery
OpenID Foundation
- OpenID Connect Core 1.0 incorporating errata set 2 OpenID Foundation specification (cited, brief quotations)
Cited on: Client credentials grant, Access, refresh and ID tokens, Scopes and consent, OpenID Connect, OAuth, OpenID Connect and SAML compared, JWT decoder and inspector - OpenID Connect Discovery 1.0 incorporating errata set 2 OpenID Foundation specification (cited, brief quotations)
Cited on: OpenID Connect
USENIX
- On Breaking SAML: Be Whoever You Want to Be (Somorovsky et al., USENIX Security 2012) Cited for facts; not reproduced
Cited on: SAML 2.0
Unicode Consortium
- Unicode Standard Annex #15: Unicode Normalization Forms Cited for facts; not reproduced
Cited on: Password policy checker
W3C
- Web Authentication: An API for accessing Public Key Credentials, Level 3 (W3C Recommendation, 25 August 2026) W3C Document License (cited, brief quotations)
Cited on: Passkeys, WebAuthn