<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Logto</title>
    <description>The latest articles on DEV Community by Logto (@logto).</description>
    <link>https://dev.to/logto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F6720%2Fcaee4597-8613-4fdc-902a-955dea9855b4.png</url>
      <title>DEV Community: Logto</title>
      <link>https://dev.to/logto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/logto"/>
    <language>en</language>
    <item>
      <title>How to choose an identity provider: The engineering team's evaluation framework</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Tue, 24 Feb 2026 05:05:48 +0000</pubDate>
      <link>https://dev.to/logto/how-to-choose-an-identity-provider-the-engineering-teams-evaluation-framework-2719</link>
      <guid>https://dev.to/logto/how-to-choose-an-identity-provider-the-engineering-teams-evaluation-framework-2719</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most identity provider comparison articles are written by identity providers. Shocking, right? They list features their product has, skip the ones it doesn't, and call it an "objective guide."&lt;/p&gt;

&lt;p&gt;This isn't that.&lt;/p&gt;

&lt;p&gt;We've reviewed dozens of real enterprise evaluation requests — the actual spreadsheets and RFP documents that procurement teams send to vendors. The patterns are clear: engineering teams consistently underweight the criteria that matter most and overweight the ones that matter least.&lt;/p&gt;

&lt;p&gt;The result? Teams pick an IdP based on a demo, discover the migration story is a nightmare six months in, and start evaluating again.&lt;/p&gt;

&lt;p&gt;Here's the evaluation framework we wish someone had given us before we started. It's built for engineering teams at B2B SaaS companies — the ones building products, not the ones buying workforce SSO for their employees.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick answer: What makes or breaks an IdP decision
&lt;/h2&gt;

&lt;p&gt;If you're skimming, here's the short version:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Protocol depth matters more than feature count.&lt;/strong&gt; Supporting "OAuth2" means nothing. Which grant types? Can you customize token claims? Can you become an OIDC provider yourself?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migration capability is the #1 underrated criterion.&lt;/strong&gt; If you can't migrate your existing users without forcing password resets, the IdP is unusable — no matter how good everything else looks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-tenancy must be native, not bolted on.&lt;/strong&gt; If organization models and per-tenant configurations require workarounds, you'll be fighting the system forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-readiness isn't future planning — it's a 12-month requirement.&lt;/strong&gt; Token exchange, agent identity, delegated scopes. If the IdP doesn't support these, you'll be back here evaluating again next year.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The rest of this guide walks through each evaluation dimension in detail, with specific questions to ask and red flags to watch for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this guide is for (and who it's not for)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;This is for you if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're a CTO, VP of Engineering, or platform architect at a 50-300 person B2B SaaS company&lt;/li&gt;
&lt;li&gt;You have 100K+ existing users and can't afford a disruptive migration&lt;/li&gt;
&lt;li&gt;You're moving upmarket into enterprise customers who need SSO, org models, and audit logs&lt;/li&gt;
&lt;li&gt;You need to write a technical evaluation report and want a framework that doesn't come from a vendor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This is NOT for you if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're looking for workforce IAM (employee SSO to internal tools) — that's a different buying decision&lt;/li&gt;
&lt;li&gt;You're a startup with 500 users and no enterprise customers yet — pick whatever has the best SDK and move on&lt;/li&gt;
&lt;li&gt;You need identity verification (KYC/KYB) — that's a separate category entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dimension 1: Protocol capabilities — Not just "supports OAuth2"
&lt;/h2&gt;

&lt;p&gt;Every IdP on the market will tell you they support OAuth2 and OIDC. That's table stakes. The real questions are about depth.&lt;/p&gt;

&lt;h3&gt;
  
  
  Grant types: Which ones and why it matters
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Must-have:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authorization Code + PKCE&lt;/strong&gt; — The only flow you should use for browser-based and mobile apps. If a vendor still recommends Implicit flow, walk away. PKCE isn't optional — it's a security requirement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client Credentials&lt;/strong&gt; — For service-to-service communication. Your backend services need to authenticate with each other without a user present.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refresh Token&lt;/strong&gt; — Sounds basic, but the implementation details vary wildly. Can you configure rotation? Expiration? Can you revoke a specific refresh token without nuking the entire session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Increasingly critical:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token Exchange (RFC 8693)&lt;/strong&gt; — This is the grant type that enables AI agent authentication, impersonation flows, and delegation. If it's missing today, ask about the roadmap. If there's no roadmap, that's a red flag.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  OIDC Provider capability
&lt;/h3&gt;

&lt;p&gt;Here's a question most teams don't think to ask: &lt;strong&gt;Can you use this IdP as an OIDC Provider — not just an OIDC consumer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Why it matters: As your SaaS grows, partners and customers may want to use your identity system to log into their own tools. You need to issue tokens, manage consent, and handle third-party app registrations. If your IdP only lets you consume external identity providers but can't act as one, you'll hit a wall when you need to federate outward.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the IdP expose an OpenID Discovery endpoint you can white-label?&lt;/li&gt;
&lt;li&gt;Can you register first-party and third-party applications with different trust levels?&lt;/li&gt;
&lt;li&gt;Can first-party apps skip the consent screen while third-party apps require it?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  JWT customization
&lt;/h3&gt;

&lt;p&gt;The token is the contract between your IdP and your services. If you can't customize it, every downstream service needs to make additional API calls to figure out what a user is allowed to do.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you add custom claims to access tokens and ID tokens?&lt;/li&gt;
&lt;li&gt;Can you embed organization context (which tenant the user is operating in) directly in the token?&lt;/li&gt;
&lt;li&gt;Can you define custom scopes that map to your application's permission model?&lt;/li&gt;
&lt;li&gt;Are claims computed at token issuance time, or can they be dynamically populated via a webhook or script?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A token that carries &lt;code&gt;{ "org_id": "org_123", "role": "admin", "auth_level": 2 }&lt;/code&gt; means your API middleware can make authorization decisions in one line. A token that only carries &lt;code&gt;{ "sub": "user_456" }&lt;/code&gt; means every service needs to call back to the IdP or a database to figure out the rest. At scale, that difference is the difference between 2ms and 200ms per request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 2: Authentication flows — The details that kill you
&lt;/h2&gt;

&lt;p&gt;Every IdP supports email/password and social login. Congratulations, you've narrowed the field to... all of them.&lt;/p&gt;

&lt;p&gt;The differentiation is in the details most demo scripts don't cover.&lt;/p&gt;

&lt;h3&gt;
  
  
  The sign-up flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Post-registration auto-login&lt;/strong&gt;: After a user signs up, are they automatically logged in? Or do they see a login page again? Forcing a user to log in immediately after registering is a conversion killer. You'd be surprised how many IdPs get this wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom registration fields&lt;/strong&gt;: Can you collect role, company name, or use case during sign-up? Or do you need a separate onboarding flow after the fact?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive profiling&lt;/strong&gt;: Can you collect additional information over multiple sessions, rather than demanding everything upfront?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The login flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;login_hint support&lt;/strong&gt;: When a user clicks a link from a marketing email, can you pre-fill their email address? This sounds trivial. It's not. It's the difference between a 40% and 60% conversion rate on email campaigns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organization-specific authentication policies&lt;/strong&gt;: Can Org A require SAML SSO while Org B uses email/password? Can you enforce MFA for enterprise tenants only? If per-tenant auth policies require code changes instead of configuration changes, you'll burn engineering cycles every time you onboard an enterprise customer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Branding customization&lt;/strong&gt;: Can you customize the login experience per tenant? Not just logo and colors — full CSS control, custom domains, and white-labeled emails. "Hosted UI vs. bring your own UI" should be a choice you make, not a limitation you accept.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What most checklists miss
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Silent authentication&lt;/strong&gt;: When a token expires, can the app silently refresh without redirecting the user? What happens if the refresh token is also expired — is there a fallback (like a sliding session via iframe)?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account linking&lt;/strong&gt;: A user signs up with Google, then tries to log in with email. Are these two accounts, or one? How does the IdP handle identity merging? Get this wrong and you'll have phantom duplicate accounts forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Passwordless options&lt;/strong&gt;: Magic links, passkeys, WebAuthn. Not because everyone needs them today, but because your enterprise customers will ask within 6 months.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dimension 3: Session and token management — The deep water
&lt;/h2&gt;

&lt;p&gt;This is where evaluations get separated from demos. Session and token management is boring until it breaks — and when it breaks, your entire user base gets logged out simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cookie security
&lt;/h3&gt;

&lt;p&gt;Not glamorous. Absolutely critical.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HttpOnly, Secure, SameSite attributes&lt;/strong&gt;: All three must be set correctly. Any IdP that doesn't set HttpOnly on session cookies is not ready for production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-subdomain support&lt;/strong&gt;: If your app runs on &lt;code&gt;app.yourproduct.com&lt;/code&gt; and your API on &lt;code&gt;api.yourproduct.com&lt;/code&gt;, can sessions span subdomains? How?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party cookie deprecation&lt;/strong&gt;: Chrome is phasing these out. How does the IdP handle cross-origin auth flows without third-party cookies? If the answer is "we're working on it," that's not good enough.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Remember me and persistent sessions
&lt;/h3&gt;

&lt;p&gt;Your users want to stay logged in for weeks, not minutes. But a 180-day persistent session has very different security implications than a 30-minute session.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you configure session duration independently from token lifetime?&lt;/li&gt;
&lt;li&gt;Is there a "remember me" option that extends the session while keeping token lifetimes short?&lt;/li&gt;
&lt;li&gt;Can you force re-authentication for sensitive operations without terminating the session?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Refresh token security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token rotation&lt;/strong&gt;: Does the IdP rotate refresh tokens on each use? (It should.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted storage&lt;/strong&gt;: Are refresh tokens encrypted at rest?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revocation granularity&lt;/strong&gt;: Can you revoke a single device's session without revoking all sessions?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurable expiration&lt;/strong&gt;: Different apps need different refresh token lifetimes. Can you configure this per-application, or is it a global setting?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dimension 4: Authorization model — Beyond basic RBAC
&lt;/h2&gt;

&lt;p&gt;Role-Based Access Control is the baseline. If the IdP doesn't support RBAC, it's not worth evaluating. But for B2B SaaS, RBAC alone isn't enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organization-scoped permissions
&lt;/h3&gt;

&lt;p&gt;Your users belong to organizations. Their permissions within each organization are different from their platform-level permissions.&lt;/p&gt;

&lt;p&gt;A user might be an admin in Org A and a viewer in Org B. The same user, two different role contexts. If the IdP can't model this natively, you'll build a parallel permissions system in your application — and now you have two sources of truth.&lt;/p&gt;

&lt;p&gt;Questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you define roles at the organization level, not just the user level?&lt;/li&gt;
&lt;li&gt;Can a single user have different roles in different organizations?&lt;/li&gt;
&lt;li&gt;Is the current organization context embedded in the token, so your API knows which org the user is operating in?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Multi-level authorization (auth_level)
&lt;/h3&gt;

&lt;p&gt;For financial applications, healthcare, or any product where certain operations carry higher risk: not all authenticated sessions are equal.&lt;/p&gt;

&lt;p&gt;Viewing a dashboard? Session cookie is fine. Initiating a wire transfer? You need a fresh MFA verification, even if the user is already logged in.&lt;/p&gt;

&lt;p&gt;This is step-up authentication, and it requires the concept of an &lt;strong&gt;authentication level&lt;/strong&gt; (&lt;code&gt;auth_level&lt;/code&gt;) as a first-class citizen in the token system.&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can the token carry an &lt;code&gt;auth_level&lt;/code&gt; claim that your backend can check?&lt;/li&gt;
&lt;li&gt;Can you trigger step-up authentication from your application without forcing a full re-login?&lt;/li&gt;
&lt;li&gt;Does the &lt;code&gt;auth_level&lt;/code&gt; have its own expiration, independent of the session?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your IdP doesn't support this natively, you'll end up building it yourself — which is exactly the kind of identity logic you're buying an IdP to avoid.&lt;/p&gt;

&lt;h3&gt;
  
  
  Token-based authorization decisions
&lt;/h3&gt;

&lt;p&gt;The ideal: your API middleware reads the token, sees the user's org, role, and auth level, and makes the authorization decision without hitting any external service.&lt;/p&gt;

&lt;p&gt;The reality with many IdPs: the token tells you who the user is, but you need a separate API call to figure out what they're allowed to do.&lt;/p&gt;

&lt;p&gt;That separate call adds latency, creates a dependency, and introduces a failure mode. At 1,000 requests per second, you don't want your authorization check making network hops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 5: Migration — The criterion that decides everything
&lt;/h2&gt;

&lt;p&gt;Here's a statistic nobody likes to talk about: most IdP evaluations end not because the new IdP isn't good enough, but because the team can't figure out how to migrate their existing users.&lt;/p&gt;

&lt;p&gt;If you have 100K+ users, migration isn't a "nice to have" — it's the entire project.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three migration strategies (and which ones the IdP must support)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Bulk import with existing password hashes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your users have passwords hashed with bcrypt, argon2, or whatever your current system uses. Can the IdP import those hashes directly and verify passwords against them?&lt;/p&gt;

&lt;p&gt;If yes: users log in with their existing password, and nothing changes from their perspective. Best case scenario.&lt;/p&gt;

&lt;p&gt;If no: every user gets a "reset your password" email. You will lose 30-50% of your user base in the migration. This is not hypothetical — we've seen it happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Progressive (lazy) migration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of migrating all users at once, you migrate them one by one as they log in. The first login hits your old system, verifies the password, and creates the user in the new IdP. Every subsequent login goes directly to the new IdP.&lt;/p&gt;

&lt;p&gt;This is the safest approach for large user bases, but it requires the IdP to support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A custom authentication hook that calls your legacy system&lt;/li&gt;
&lt;li&gt;The ability to create users on-the-fly during login&lt;/li&gt;
&lt;li&gt;Tracking which users have been migrated vs. which haven't&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Dual-write (running systems in parallel)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During transition, both the old and new identity systems are active. Writes go to both, reads gradually shift to the new system. This provides a rollback path but adds operational complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Migration red flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"We support CSV import"&lt;/strong&gt; — This means bulk import of user profiles, not passwords. You'll still need password resets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"We have a migration guide"&lt;/strong&gt; — Read it carefully. If it says "users will need to set a new password," that's the 30-50% user loss scenario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mention of hash compatibility&lt;/strong&gt; — If the vendor hasn't thought about password hash migration, they haven't worked with teams at your scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Questions to ask
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Which password hash algorithms do you support for import? (bcrypt, argon2, scrypt, PBKDF2, custom?)&lt;/li&gt;
&lt;li&gt;Can we run a progressive migration where users are migrated on first login?&lt;/li&gt;
&lt;li&gt;Can we track migration progress — what percentage of users have been migrated?&lt;/li&gt;
&lt;li&gt;What's the rollback strategy if migration doesn't go well?&lt;/li&gt;
&lt;li&gt;Can we maintain session continuity — so users don't get logged out during migration?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the vendor can't answer these confidently, they haven't done this before. Move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 6: Multi-tenancy — Native vs. bolted on
&lt;/h2&gt;

&lt;p&gt;B2B SaaS means multi-tenancy. Your customers are organizations with multiple users, roles, and access policies. The IdP needs to understand this natively.&lt;/p&gt;

&lt;h3&gt;
  
  
  What "native multi-tenancy" means
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Organization as a first-class entity&lt;/strong&gt;: Not a custom field on the user profile, but a proper data model with its own ID, configuration, and membership list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-organization authentication policies&lt;/strong&gt;: Org A uses SAML SSO with their corporate IdP. Org B uses email/password with mandatory MFA. Org C uses Google Workspace login. All configured via UI or API, not code changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organization invitations and membership management&lt;/strong&gt;: Admins within each org can invite users, assign roles, and remove members. The IdP handles the invitation flow, email verification, and role assignment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organization-scoped tokens&lt;/strong&gt;: When a user operates within an organization, the token includes the org context. Your API knows which org's data to return.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The "custom metadata" workaround
&lt;/h3&gt;

&lt;p&gt;Some IdPs don't have a native organization model. They suggest using custom user metadata (&lt;code&gt;user.app_metadata.org_id = "123"&lt;/code&gt;) as a workaround.&lt;/p&gt;

&lt;p&gt;This falls apart fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user belonging to multiple orgs requires array management in metadata&lt;/li&gt;
&lt;li&gt;No built-in invitation or membership flow&lt;/li&gt;
&lt;li&gt;No per-org auth policies&lt;/li&gt;
&lt;li&gt;No org-scoped tokens — you have to infer context from other signals&lt;/li&gt;
&lt;li&gt;Audit logs don't know about organizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the vendor says "you can model organizations using our metadata fields," that's the identity equivalent of storing relational data in a JSON column. It works until it doesn't.&lt;/p&gt;

&lt;h3&gt;
  
  
  Questions to ask
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Is the organization model native or built on top of user metadata?&lt;/li&gt;
&lt;li&gt;Can users belong to multiple organizations simultaneously?&lt;/li&gt;
&lt;li&gt;Can we configure different authentication requirements per organization?&lt;/li&gt;
&lt;li&gt;Are organization-scoped roles and permissions supported natively?&lt;/li&gt;
&lt;li&gt;Can organization admins manage members via a self-service UI?&lt;/li&gt;
&lt;li&gt;Does the token include organization context?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dimension 7: AI-readiness — The criterion nobody's asking yet
&lt;/h2&gt;

&lt;p&gt;Twelve months ago, "AI agent authentication" wasn't on any evaluation checklist. Today, if you're building AI features into your product — copilots, autonomous agents, AI-driven workflows — your IdP needs to handle a new type of identity: the agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why agents break the traditional model
&lt;/h3&gt;

&lt;p&gt;Traditional auth has two actors: the user and the application. OAuth2 was designed around this.&lt;/p&gt;

&lt;p&gt;AI agents introduce a third: a non-human entity that acts on behalf of a user, with constrained permissions, and needs its own audit trail.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An agent isn't a user — it doesn't have a password or a browser session&lt;/li&gt;
&lt;li&gt;An agent isn't a machine-to-machine service — it's acting on behalf of a specific user&lt;/li&gt;
&lt;li&gt;An agent needs scoped, time-limited permissions — not the full access the user has&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What your IdP needs to support
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Token Exchange (RFC 8693):&lt;/strong&gt; The agent presents its own credential plus the user's authorization, and receives a scoped token. The token carries: who (the user), what (the agent), scope (the permission boundary), and when (the expiration).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent as a client type:&lt;/strong&gt; The agent should be modeled as a proper OAuth2 client with its own &lt;code&gt;client_id&lt;/code&gt;, not a hack using API keys or shared user tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Delegated scope management:&lt;/strong&gt; The user can grant specific permissions to the agent — read but not write, access to certain resources but not others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit distinction:&lt;/strong&gt; Your logs must differentiate between "user did X" and "agent did X on behalf of user." If you can't distinguish these, you'll fail your next SOC2 audit when the auditor asks "who made this change?"&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP (Model Context Protocol) compatibility
&lt;/h3&gt;

&lt;p&gt;MCP is becoming the standard protocol for AI agents to interact with tools and services. If your IdP supports OAuth-based authentication for MCP servers, agents can authenticate properly through the protocol layer rather than through API keys or shared secrets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Questions to ask
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do you support OAuth2 Token Exchange?&lt;/li&gt;
&lt;li&gt;Can agents be modeled as distinct client types?&lt;/li&gt;
&lt;li&gt;Can tokens carry delegation information (who authorized the agent, what scope)?&lt;/li&gt;
&lt;li&gt;Do audit logs distinguish agent actions from human actions?&lt;/li&gt;
&lt;li&gt;Is there MCP server integration or OAuth support for agent-to-tool authentication?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the vendor hasn't thought about this, they're building for 2020. You're planning for 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dimension 8: Non-functional requirements — The stuff that keeps you up at night
&lt;/h2&gt;

&lt;p&gt;Features sell. Operations decide whether you renew.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authentication throughput&lt;/strong&gt;: Can the system handle 100+ auth requests per second during peak? What about 1,000+?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token validation latency&lt;/strong&gt;: If your services validate JWTs locally (as they should), this is sub-millisecond. But if the IdP requires introspection calls, what's the P99 latency?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale ceiling&lt;/strong&gt;: What's the maximum Monthly Active Users (MAU) supported? Is there a demonstrated track record at your target scale?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Compliance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SOC2 Type II&lt;/strong&gt;: Not Type I. Type II means they've been audited over a period, not just at a point in time. If they only have Type I, ask when Type II is expected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logs&lt;/strong&gt;: Every authentication event, permission change, and admin action logged. Can you export logs to your SIEM? Are logs immutable?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data residency&lt;/strong&gt;: Can you specify which region stores user data? For EU customers, this isn't optional.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Reliability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Uptime SLA&lt;/strong&gt;: 99.9% sounds good until you realize that's 8.7 hours of downtime per year. 99.99% is 52 minutes. For authentication — the front door of your application — the difference matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failover&lt;/strong&gt;: What happens during a provider outage? Is there a fallback mechanism? Multi-region deployment?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incident history&lt;/strong&gt;: Check their status page history. Not what they promise — what actually happened.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data portability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User export&lt;/strong&gt;: Can you export all user data, including metadata, organization memberships, and roles? In what format?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standards compliance&lt;/strong&gt;: Are they using standard protocols (OIDC, SCIM) that make migration to a different provider feasible?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lock-in signals&lt;/strong&gt;: Proprietary APIs, custom protocols, non-standard token formats — these are lock-in indicators. The more proprietary the integration, the harder it is to leave.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The evaluation matrix: A practical scoring framework
&lt;/h2&gt;

&lt;p&gt;After evaluating across all dimensions, you need a way to compare. Here's a priority framework:&lt;/p&gt;

&lt;h3&gt;
  
  
  P1 — Deal-breakers (must pass or disqualify)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Why it's P1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Password hash import or progressive migration&lt;/td&gt;
&lt;td&gt;Can't use it if you can't migrate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authorization Code + PKCE support&lt;/td&gt;
&lt;td&gt;Security baseline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native organization model&lt;/td&gt;
&lt;td&gt;B2B SaaS requirement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SOC2 Type II or clear path to it&lt;/td&gt;
&lt;td&gt;Enterprise customers will ask&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;99.9%+ uptime SLA&lt;/td&gt;
&lt;td&gt;Auth down = product down&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  P2 — Strongly preferred (significant engineering effort if missing)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Why it's P2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Custom JWT claims&lt;/td&gt;
&lt;td&gt;Avoids per-request permission lookups&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per-org authentication policies&lt;/td&gt;
&lt;td&gt;Enterprise customer onboarding&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organization-scoped roles and tokens&lt;/td&gt;
&lt;td&gt;Multi-tenant authorization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Refresh token rotation and revocation&lt;/td&gt;
&lt;td&gt;Security best practice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosted UI + custom UI option&lt;/td&gt;
&lt;td&gt;Flexibility for different use cases&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  P3 — Important (plan for within 12 months)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Why it's P3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Token Exchange (RFC 8693)&lt;/td&gt;
&lt;td&gt;AI agent authentication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OIDC Provider capability&lt;/td&gt;
&lt;td&gt;Partner federation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Step-up authentication / auth_level&lt;/td&gt;
&lt;td&gt;Financial or high-risk operations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SCIM provisioning&lt;/td&gt;
&lt;td&gt;Enterprise customer directory sync&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passkey / WebAuthn support&lt;/td&gt;
&lt;td&gt;Passwordless direction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  P4 — Nice to have (won't block decision)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Why it's P4&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Built-in analytics dashboard&lt;/td&gt;
&lt;td&gt;Can build from audit logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;White-labeled email templates&lt;/td&gt;
&lt;td&gt;Convenience feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual flow builder&lt;/td&gt;
&lt;td&gt;Convenience feature&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pre-built social connectors (beyond top 5)&lt;/td&gt;
&lt;td&gt;Long tail providers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;How to use this&lt;/strong&gt;: Start with P1. If a vendor fails any P1 criterion, stop evaluating them. Then score P2 and P3 categories. The vendor with the best combined P2+P3 score is your answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common evaluation mistakes
&lt;/h2&gt;

&lt;p&gt;We've seen teams make the same mistakes repeatedly. Here's how to avoid them:&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistake 1: Evaluating on features, not architecture
&lt;/h3&gt;

&lt;p&gt;A feature comparison table tells you what exists. It doesn't tell you how it's built. An IdP might "support" organizations by storing org IDs in user metadata. That checks the box on a spreadsheet but creates real problems in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: For every feature, ask "how is this implemented?" — not just "do you have this?"&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistake 2: Ignoring migration until after selection
&lt;/h3&gt;

&lt;p&gt;Teams pick the "best" IdP, start implementation, and then realize they can't migrate their users without a password reset campaign. Now they're either stuck with a bad migration experience or starting the evaluation over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Make migration capability your first filter, not your last.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistake 3: Over-indexing on the demo
&lt;/h3&gt;

&lt;p&gt;Every vendor's demo is polished. It shows the happy path with a clean database and zero edge cases. Your production environment has users with merged accounts, weird unicode in profile fields, and sessions that shouldn't exist but do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Ask for a proof-of-concept with your actual data. Import 1,000 real users and run your actual authentication flows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistake 4: Not involving the right people
&lt;/h3&gt;

&lt;p&gt;If only the platform team evaluates, they'll pick what's technically cleanest. If only product evaluates, they'll pick what's easiest to integrate. If only security evaluates, they'll pick what has the most compliance checkboxes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Evaluation team should include platform engineering, product, and security. Each owns different P1/P2 criteria.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mistake 5: Forgetting you'll need to leave someday
&lt;/h3&gt;

&lt;p&gt;Vendor lock-in is real. Proprietary SDKs, custom APIs, non-standard token formats — they all make migration harder later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Prefer IdPs that use standard protocols (OIDC, OAuth2, SCIM). Your future self will thank you.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How long does an IdP evaluation typically take?
&lt;/h3&gt;

&lt;p&gt;For a thorough evaluation including proof-of-concept testing, expect 4-8 weeks. Rushing it leads to the mistakes we outlined above — particularly the migration oversight. Budget 2 weeks for requirements gathering, 2-3 weeks for vendor evaluation and PoC, and 1-2 weeks for stakeholder alignment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should we build our own auth instead?
&lt;/h3&gt;

&lt;p&gt;It depends on your stage. If you have fewer than 10,000 users and no enterprise customers, a lightweight auth library might be fine. But once you need SSO, multi-tenancy, MFA, and compliance documentation, the maintenance cost of homegrown auth exceeds the cost of a dedicated IdP. We've seen engineering teams spend 2-3 full-time engineers maintaining custom auth systems — that's $300-500K/year in opportunity cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's the difference between CIAM and workforce IAM?
&lt;/h3&gt;

&lt;p&gt;Customer Identity and Access Management (CIAM) is what your product's end users interact with — sign-up, login, profile management. Workforce IAM is what your employees use to access internal tools (Okta for your company's Slack, Google Workspace, etc.). They're different buying decisions with different evaluation criteria. This guide is about CIAM.&lt;/p&gt;

&lt;h3&gt;
  
  
  How important is open-source vs. proprietary?
&lt;/h3&gt;

&lt;p&gt;Open-source IdPs offer transparency (you can audit the code), portability (self-host if needed), and community contributions. Proprietary IdPs may offer more polished UIs and managed services. The key question isn't "open vs. closed" — it's "can I leave if I need to?" Open-source solutions tend to make leaving easier because the data model and APIs are public.&lt;/p&gt;

&lt;h3&gt;
  
  
  When should AI agent authentication be a P1 instead of P3?
&lt;/h3&gt;

&lt;p&gt;If you're already building AI features that access user data on behalf of users (copilots, automated workflows, AI assistants), move it to P1 now. If AI features are on your 6-12 month roadmap, keep it at P3 but weight it heavily. If AI isn't on your radar, it can stay P4 — but revisit in 6 months.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do we evaluate pricing when vendors use different models?
&lt;/h3&gt;

&lt;p&gt;Most IdPs price by Monthly Active Users (MAU). But "MAU" definitions vary — some count any login, others count unique users, some count M2M tokens separately. Get the vendor to quote your specific scenario: X users, Y organizations, Z M2M connections, with your expected authentication volume. Compare total cost, not unit price.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;Choosing an identity provider is an infrastructure decision, not a feature decision. You're committing to a system that will handle every user's first interaction with your product, every permission check in your API, and every audit log entry your compliance team reviews.&lt;/p&gt;

&lt;p&gt;The evaluation framework above covers what actually matters — not the marketing bullet points. Use it to filter candidates quickly (P1 criteria first), evaluate deeply (P2 and P3 criteria with proof-of-concept testing), and make a decision that holds up for years, not months.&lt;/p&gt;

&lt;p&gt;The teams that get this right share one thing in common: they treat identity as infrastructure, not as a feature to ship and forget.&lt;/p&gt;

</description>
      <category>identitymanagement</category>
      <category>enterprise</category>
      <category>auth</category>
    </item>
    <item>
      <title>Remote MCP server in action: a new entry point for SaaS products in the AI era</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Wed, 04 Feb 2026 15:42:40 +0000</pubDate>
      <link>https://dev.to/logto/remote-mcp-server-in-action-a-new-entry-point-for-saas-products-in-the-ai-era-kjc</link>
      <guid>https://dev.to/logto/remote-mcp-server-in-action-a-new-entry-point-for-saas-products-in-the-ai-era-kjc</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;SaaS products have a long-standing problem: time-to-value is too slow. A lot of users churn before they reach the “aha” moment.&lt;/p&gt;

&lt;p&gt;We’ve iterated on Logto onboarding a bunch of times. It helped, but the bottleneck didn’t go away. You still end up reading docs, skimming tutorials, installing SDKs, wiring configs, writing code, then debugging the last 10% before anything works.&lt;/p&gt;

&lt;p&gt;So we tried a different approach: a remote MCP server as Logto’s IDE-native control plane. Instead of clicking through an admin console, you configure Logto and generate integration code through a conversation, right where you’re building the app.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/cpjf9b6qt6U"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;One prompt can take you from zero to a working integration. The agent doesn’t just generate code, it also creates and configures the Logto application in your tenant. All from inside your IDE. (&lt;a href="https://docs.logto.io/logto-cloud/logto-mcp-server" rel="noopener noreferrer"&gt;Try Logto MCP Server&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;In this article, I will share our experience and thinking around building the Logto MCP Server, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP vs. Agent Skills: why we chose MCP
&lt;/li&gt;
&lt;li&gt;Problems we met when shipping an MCP server, and how we solved them
&lt;/li&gt;
&lt;li&gt;How we design MCP tools, and how you should design yours
&lt;/li&gt;
&lt;li&gt;Our expectations for the future of MCP
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br&gt;
The OAuth implementation of the Logto MCP Server is based on &lt;a href="https://mcp-auth.dev" rel="noopener noreferrer"&gt;mcp-auth&lt;/a&gt; and Logto. If you are interested in MCP server OAuth, you can refer to this open source project.&lt;br&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs. Agent Skills: why we chose MCP
&lt;/h2&gt;

&lt;p&gt;Before deciding how AI should access Logto, we evaluated two options: MCP servers and Agent Skills.&lt;/p&gt;

&lt;p&gt;MCP servers have two forms: local and remote. &lt;/p&gt;

&lt;p&gt;A local MCP server runs on the user’s machine. It requires service installation, environment setup, credentials, or special login flows. In usage and delivery, it is very similar to skills.&lt;/p&gt;

&lt;p&gt;A remote MCP server is hosted on the server side. Users connect by URL and authorize with OAuth. This model is closer to SaaS service extension.&lt;/p&gt;

&lt;p&gt;From a structure view, an Agent Skill is a combination of "business logic + underlying capabilities". Those capabilities can be tools, CLIs, or API calls. MCP tools can carry this layer in a unified way.&lt;/p&gt;

&lt;p&gt;So the key question is not how capabilities are implemented, but how they are delivered to users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Agent Skills deliver: a full local toolchain (Skill package + local runtime + API keys or platform credentials + CLI tools + install, config, upgrade, and maintenance flow).&lt;br&gt;&lt;br&gt;
In essence, you give the capability to users to run by themselves.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remote MCP servers deliver: a remote service entry (URL + OAuth login).&lt;br&gt;&lt;br&gt;
In essence, you provide the capability as a service.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below, we compare them from user experience, ecosystem reach, and delivery and maintenance cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  User experience
&lt;/h3&gt;

&lt;p&gt;Agent Skills usually depend on platform APIs or CLIs. Users must create API keys or install and log in to CLIs first. These steps are not complex, but they raise the entry barrier.&lt;/p&gt;

&lt;p&gt;MCP servers support OAuth. Users log in with their SaaS account. The experience is like “Sign in with Google.”&lt;/p&gt;

&lt;p&gt;For users, using an MCP server is simple: enter a URL, log in, connect. This is the experience we want to deliver.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ecosystem reach
&lt;/h3&gt;

&lt;p&gt;On the &lt;a href="https://modelcontextprotocol.io/clients" rel="noopener noreferrer"&gt;MCP website&lt;/a&gt;, there are already 104 AI apps that support MCP, including tools like VS Code, Cursor, and Windsurf.&lt;/p&gt;

&lt;p&gt;Agent Skills are still platform-specific. Even if many platforms start to support them, when we ship an MCP server, users can use it immediately. When we ship a Skill, only users on that platform can use it.&lt;/p&gt;

&lt;p&gt;MCP is also included by the &lt;a href="https://aaif.io/" rel="noopener noreferrer"&gt;Agentic AI Foundation (AAIF)&lt;/a&gt;. It is a protocol-level standard. The ecosystem will keep growing. For us, this makes MCP worth long-term investment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delivery and maintenance cost
&lt;/h3&gt;

&lt;p&gt;Agent Skills depend on platform APIs or CLIs, which quickly brings problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What if the API changes?
&lt;/li&gt;
&lt;li&gt;What if the CLI breaks compatibility?
&lt;/li&gt;
&lt;li&gt;How do you upgrade and redistribute the Skill?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You also need to distribute CLIs, manage scattered credentials, adapt to multiple platforms, and guide users to upgrade. The ROI is very low.&lt;/p&gt;

&lt;p&gt;MCP servers are much simpler. Users connect to a URL. It always points to the latest version. When we update the MCP server, users get it next time they connect. No upgrades needed. If APIs change, we update them inside the MCP server.&lt;/p&gt;

&lt;p&gt;Most SaaS products already have strong infrastructure: solid APIs and mature auth systems. An MCP server fits naturally as the “AI interface” of the API, just like an admin console is another interface on top of the same APIs.&lt;/p&gt;

&lt;p&gt;For Logto, choosing an MCP server fits our architecture and uses our strengths.&lt;/p&gt;

&lt;p&gt;It also centralizes all requests into one entry point. Logs and audits are easier. Permissions are clear: AI can only do what the user authorizes. This model is structurally cleaner for enterprise and compliance scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems we met when shipping an MCP server, and how we solved them
&lt;/h2&gt;

&lt;p&gt;MCP is not perfect. Most issues are ecosystem maturity problems. They will improve over time. Before that, we use workarounds to meet real needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fragmented MCP feature support
&lt;/h3&gt;

&lt;p&gt;The MCP spec defines many features, but client support varies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: widely supported
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAuth&lt;/strong&gt;: well supported in VS Code; tools like Cursor need &lt;code&gt;mcp-remote&lt;/code&gt; as a bridge
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other features&lt;/strong&gt; (Resources, Prompts, Instructions): inconsistent support
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, tools are the most reliable common layer (check out the &lt;a href="https://modelcontextprotocol.io/clients" rel="noopener noreferrer"&gt;MCP Community Page&lt;/a&gt; to see what features each client supports).&lt;/p&gt;

&lt;p&gt;So our strategy is simple: &lt;strong&gt;build on tools&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM does not know how to use your tools
&lt;/h3&gt;

&lt;p&gt;This is a business-layer problem.&lt;/p&gt;

&lt;p&gt;With Agent Skills, business logic and context are packaged together. The LLM knows how to use them. MCP only provides tools. After connection, the LLM does not know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The usage scenarios
&lt;/li&gt;
&lt;li&gt;The call order
&lt;/li&gt;
&lt;li&gt;The business constraints
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP has the concept of Instructions, but not all clients support it. Instructions also push all content into context at connection time, which wastes tokens.&lt;/p&gt;

&lt;p&gt;Another idea is to put guidance into tool descriptions. But this causes two problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Descriptions become complex. Multi-tool workflows create tangled logic and are hard to maintain.
&lt;/li&gt;
&lt;li&gt;As tool count grows, descriptions consume large parts of the context window.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Our workaround: provide a &lt;code&gt;getInstructions&lt;/code&gt; tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The idea is simple: if Instructions are not well supported, turn them into tools.&lt;/p&gt;

&lt;p&gt;The LLM can call &lt;code&gt;getInstructions&lt;/code&gt; on demand.&lt;br&gt;&lt;br&gt;
For task A, it calls &lt;code&gt;getTaskAInstructions&lt;/code&gt;. The MCP server returns a prompt that explains how to complete task A and how to combine other tools.&lt;/p&gt;

&lt;p&gt;Complex business logic stays behind the instruction tools. Other tools stay simple. Tool descriptions focus only on their own function.&lt;/p&gt;

&lt;p&gt;This is similar to Agent Skills: prompts are loaded on demand. It is also more efficient than global Instructions because it avoids dumping everything into context.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLM may leak your secrets
&lt;/h3&gt;

&lt;p&gt;For many SaaS products, some secrets must never be exposed (for example, client secrets, API keys, or webhook signing keys). If they leak, others can impersonate you or gain direct access to resources.&lt;/p&gt;

&lt;p&gt;The risk with LLMs is that a chat is not a secure channel. Conversations can be logged, copied, forwarded, or end up in debugging logs. You cannot assume “only me and the model can see this.” So handing a long-lived secret to an LLM, or asking it to output a secret for users to copy, is high risk.&lt;/p&gt;

&lt;p&gt;This is common in traditional web app integrations: developers often need a secret, put it into server environment variables or config files, and then finish steps like initializing SDKs.&lt;/p&gt;

&lt;p&gt;To keep onboarding easy without weakening secret safety, we do three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use temporary secrets during integration&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During the chat-based setup, the MCP server only returns short-lived temporary secrets (for example, valid for 1 hour). They are enough to get the integration working, and they often expire before you go live. Before going live, developers create and replace them with long-lived production secrets outside the chat.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Make the security boundary explicit&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We clearly warn users: do not create, paste, or store production secrets in the chat. We also remind developers that even environment variables or config files can leak if an agent / LLM can read them through tools or indirect access. Put production secrets only in environments where no AI-assisted integration is used.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Do not handle production secrets in chat; guide users to the console&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Long-lived secrets are not generated or distributed through the chat. They are created and managed in the console credentials page. In the chat, we only provide a direct link to the console so users can complete production secret setup there.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we design MCP tools
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Our path
&lt;/h3&gt;

&lt;p&gt;Logto has a full Management API. Our first idea was simple: expose every API endpoint as an MCP tool.&lt;/p&gt;

&lt;p&gt;This failed quickly.&lt;/p&gt;

&lt;p&gt;First, context explosion. Logto has many APIs. Mapping them one-to-one fills the context window. Each tool description costs tokens.&lt;/p&gt;

&lt;p&gt;Second, loss of meaning. APIs are atomic building blocks for developers. But users of the Logto MCP Server are not building systems. They just want to finish tasks. They do not care how many APIs exist.&lt;/p&gt;

&lt;p&gt;Example: Logto has a &lt;code&gt;sign-in-experience&lt;/code&gt; API for branding, sign-in methods, sign-up methods, and security policies.&lt;br&gt;&lt;br&gt;
At first, we thought about how to expose all parameters to the LLM. How to teach it to combine calls.&lt;/p&gt;

&lt;p&gt;But this is the wrong mindset. Users are not calling APIs. They want to change branding or configure login methods.&lt;/p&gt;

&lt;p&gt;So tools should be &lt;code&gt;updateBranding&lt;/code&gt;, &lt;code&gt;updateSignInMethod&lt;/code&gt;, &lt;code&gt;updateSignUpMethod&lt;/code&gt;. The MCP server handles API composition internally.&lt;/p&gt;

&lt;p&gt;Logto MCP Server should be treated as a product, not an API wrapper. It is "another admin console".&lt;/p&gt;

&lt;h3&gt;
  
  
  How to design MCP tools
&lt;/h3&gt;

&lt;p&gt;The rule becomes clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If users directly use your service (like a console), tools should be business-oriented.
&lt;/li&gt;
&lt;li&gt;If you provide base capabilities for others to build on, tools should stay atomic and simple. Example: a filesystem MCP server with &lt;code&gt;read_file&lt;/code&gt;, &lt;code&gt;write_file&lt;/code&gt;, then coding agents combine them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep tool logic and descriptions simple to save context.
&lt;/li&gt;
&lt;li&gt;For complex workflows, use &lt;code&gt;getInstructions&lt;/code&gt; tools to load guidance on demand. Keep their descriptions simple too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Our expectations for the future of MCP
&lt;/h2&gt;

&lt;p&gt;While building the MCP server, we also thought about what could improve the ecosystem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Skill-level capability delivery
&lt;/h3&gt;

&lt;p&gt;Sometimes MCP servers need to provide not just tools, but guidance on how to combine them into tasks, like Agent Skills.&lt;/p&gt;

&lt;p&gt;This is common in SaaS. For example, GitHub MCP Server, Logto MCP Server, or analytics platforms. Users want workflows, not atomic calls.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;getInstructions&lt;/code&gt; tool is a workaround. Protocol-level support would be better.&lt;/p&gt;

&lt;h3&gt;
  
  
  Session-level MCP enablement
&lt;/h3&gt;

&lt;p&gt;Clients connect to many MCP servers, but not every session needs all of them. Session-level enable/disable could reduce context waste.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context isolation for MCP tool calls
&lt;/h3&gt;

&lt;p&gt;Tool calls consume a lot of context. If MCP interactions are handled by sub-agents, the main conversation could receive only condensed results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This is our experience with building a remote MCP server.&lt;/p&gt;

&lt;p&gt;If you are exploring this direction, try the &lt;a href="https://docs.logto.io/logto-cloud/logto-mcp-server" rel="noopener noreferrer"&gt;Logto MCP Server&lt;/a&gt; or join our &lt;a href="https://discord.gg/fUQmaFyAam" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; to exchange real-world implementation experience with the community.&lt;/p&gt;

&lt;p&gt;We will also share architecture design and OAuth flow details in future posts.&lt;/p&gt;

</description>
      <category>mcpserver</category>
      <category>saas</category>
      <category>agents</category>
    </item>
    <item>
      <title>Ship user authentication with one prompt: introducing Logto MCP Server</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Wed, 04 Feb 2026 15:34:50 +0000</pubDate>
      <link>https://dev.to/logto/ship-user-authentication-with-one-prompt-introducing-logto-mcp-server-3aol</link>
      <guid>https://dev.to/logto/ship-user-authentication-with-one-prompt-introducing-logto-mcp-server-3aol</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;"Integrate Logto into my project"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One prompt, and you get a working auth setup.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/cpjf9b6qt6U"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Today we’re launching &lt;a href="https://docs.logto.io/logto-cloud/logto-mcp-server" rel="noopener noreferrer"&gt;&lt;strong&gt;Logto MCP Server&lt;/strong&gt;&lt;/a&gt;: a hosted MCP server that lets your AI tool set up Logto for your app. No local installation. No copying API keys.&lt;/p&gt;

&lt;p&gt;The agent can inspect your project, create a Logto application, apply the right settings, and generate integration code you can run. What used to be a multi-step setup becomes a short conversation, inside your IDE.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get started in 2 steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://docs.logto.io/logto-cloud/logto-mcp-server" rel="noopener noreferrer"&gt;Add Logto MCP Server to your AI tool&lt;/a&gt; (Cursor, VS Code, OpenCode, Claude Desktop, and any client that supports MCP authorization)&lt;/li&gt;
&lt;li&gt;Ask it to integrate Logto&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No API keys to copy around. You authenticate once, then you can start working.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;"Integrate Logto into my project"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent detects your stack, creates the Logto app, and generates working integration code. It supports &lt;a href="https://docs.logto.io/quick-starts" rel="noopener noreferrer"&gt;38+ quick starts&lt;/a&gt;, including React, Next.js, Vue, Nuxt, SvelteKit, Express, Go, Python, iOS, Android, Flutter, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"How do I set up social login?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ask questions in plain English. The agent searches Logto docs and answers with citations, so you can verify and keep moving.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjdqktgsgnv6uth1pu4dk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjdqktgsgnv6uth1pu4dk.jpg" alt="Ask anything about Logto"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for developers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Hosted MCP server, no local installation required&lt;/li&gt;
&lt;li&gt;Works with your tools: Cursor, VS Code, OpenCode, Claude Desktop, and any client that supports MCP authorization&lt;/li&gt;
&lt;li&gt;Secure by default: OIDC/OAuth 2.1 compliant, plus RBAC, MFA, CAPTCHA, and more&lt;/li&gt;
&lt;li&gt;Standards-based auth for MCP: uses the MCP Authorization spec, powered by &lt;a href="https://mcp-auth.dev" rel="noopener noreferrer"&gt;mcp-auth&lt;/a&gt; (our open source project bringing standard auth to MCP servers)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;This first release is about the “quick start” path: get a working sign-in flow running quickly.&lt;/p&gt;

&lt;p&gt;Next, we’re expanding what the MCP server can configure and guide you through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign-in experience: branding, sign-in methods, social providers&lt;/li&gt;
&lt;li&gt;RBAC: roles, permissions, and recommended patterns&lt;/li&gt;
&lt;li&gt;Multi-tenancy: organizations and B2B SaaS setups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to influence the roadmap or you hit rough edges, join our &lt;a href="https://discord.gg/fUQmaFyAam" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;! &lt;/p&gt;

&lt;h2&gt;
  
  
  Learn more
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;👉 &lt;a href="https://docs.logto.io/logto-cloud/logto-mcp-server" rel="noopener noreferrer"&gt;Get started with Logto MCP Server&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🌟 &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Explore Logto features&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>authentication</category>
    </item>
    <item>
      <title>Online sign-up form builder: From authentication to user profile collection</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Fri, 30 Jan 2026 07:27:09 +0000</pubDate>
      <link>https://dev.to/logto/online-sign-up-form-builder-from-authentication-to-user-profile-collection-3fhp</link>
      <guid>https://dev.to/logto/online-sign-up-form-builder-from-authentication-to-user-profile-collection-3fhp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Picture this: A potential customer discovers your amazing product, gets excited about what it can do for them, clicks that bright "Get Started" button... and then abandons your site within seconds. Sound familiar? You're not alone. The sign-up form is the digital equivalent of a first date—mess it up, and there's rarely a second chance.&lt;/p&gt;

&lt;p&gt;In today's hyper-competitive digital landscape, your registration form isn't just a data collection tool—it's your conversion battleground. The difference between a thoughtfully crafted authentication experience and a generic, friction-heavy form can mean the difference between explosive growth and stagnant user acquisition.&lt;/p&gt;

&lt;p&gt;Enter Logto's revolutionary no-code sign-up form builder. This isn't just another auth solution; it's your secret weapon for turning curious visitors into engaged users while collecting the user profile data that powers truly personalized experiences.&lt;/p&gt;

&lt;p&gt;Ready to see the transformation in action? Watch how Logto revolutionizes user registration from a technical headache into a competitive advantage:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/vSr5Ylxlhnk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  What every sign-up form needs
&lt;/h2&gt;

&lt;p&gt;Every high-converting sign-up form needs two fundamental elements that work in perfect harmony:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication that actually works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Your authentication system is like a bouncer at an exclusive club—it needs to be secure but not intimidating. Smart businesses offer multiple entry points: traditional username/password combinations for the security-conscious, email or phone verification for the practical, social sign-ins for the convenience-seekers, and enterprise SSO for the corporate crowd. The magic happens when users can choose their preferred method without friction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Strategic user profile collection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beyond the basic "who are you?" questions, savvy products collect user profile data that serves real business purposes. Think personal details that enable customization, contact preferences that reduce spam complaints, and business-specific information that powers segmentation. For B2C products, this might mean preference data that improves recommendations. For B2B applications, it's company size, industry, and role information that enables targeted onboarding.&lt;/p&gt;

&lt;p&gt;The golden rule? Collect only what you need immediately, then gather the rest progressively as users engage with your product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why every commercial product needs a strategic sign-up form
&lt;/h2&gt;

&lt;p&gt;Here's a sobering reality check: According to FormStack's 2023 research, 67% of users will permanently abandon a form if they encounter any friction during the signup process. Even more shocking? Google's data reveals that 92% of users will leave a website if the sign-up process takes longer than 3 minutes.&lt;/p&gt;

&lt;p&gt;But here's where it gets interesting—companies with optimized sign-up forms see conversion rates that are 25% higher than industry averages, and those leveraging social sign-in options experience up to 42% better completion rates.&lt;/p&gt;

&lt;p&gt;Your registration form isn't just a gateway; it's your first sales conversation, your brand's handshake, and often the make-or-break moment that determines whether a curious visitor becomes a loyal customer. In SaaS businesses, improving signup conversion by just 10% can translate to millions in additional annual recurring revenue.&lt;/p&gt;

&lt;p&gt;The challenge? User registration is merely the tip of the identity management iceberg. Modern products need authentication systems that scale from startup MVP to enterprise-grade platform without breaking a sweat. This is precisely where identity-as-a-service platforms like Logto transform the game—turning what used to be months of complex development into a few hours of smart configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Custom branding - make it yours
&lt;/h2&gt;

&lt;p&gt;First impressions happen in milliseconds, and your registration form needs to feel like a natural extension of your brand. Logto's branding engine transforms generic auth screens into branded experiences that users trust.&lt;/p&gt;

&lt;p&gt;Upload your logo, define brand colors, enable dark mode support, and add favicon customization for that professional polish. Multi-language support and legal compliance links are built-in. Navigate to &lt;a href="https://cloud.logto.io/to/sign-in-experience/branding" rel="noopener noreferrer"&gt;Console &amp;gt; Sign-in Experience &amp;gt; Branding&lt;/a&gt; and configure everything in minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Sign-up and sign-in configuration
&lt;/h2&gt;

&lt;p&gt;Configure your &lt;strong&gt;authentication&lt;/strong&gt; methods to maximize both security and user conversion:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexible registration options:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Email/Phone/Username registration&lt;/strong&gt;: Support multiple identifier types with email/SMS verification and password setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Social sign-in integration&lt;/strong&gt;: Reduce registration friction with pre-built connectors for major social platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise SSO&lt;/strong&gt;: Enable corporate authentication for B2B applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Additional flow configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sign-in methods&lt;/strong&gt;: Define which authentication methods users can use for returning visits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password recovery&lt;/strong&gt;: Configure forgot password flows with multiple recovery options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account linking&lt;/strong&gt;: Allow users to connect multiple authentication methods to single accounts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl4mvqnv6pwpr46am2j6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpl4mvqnv6pwpr46am2j6.png" alt="sign-up-method.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These configurations ensure your registration form supports diverse user preferences while maintaining security standards appropriate for your application's risk profile.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Collect additional user profile data (advanced capabilities)
&lt;/h2&gt;

&lt;p&gt;This is where Logto's sign-up form builder becomes your conversion optimization secret weapon. The "Collect user profile" feature transforms basic registration into intelligent data gathering that fuels personalization engines without killing completion rates.&lt;/p&gt;

&lt;p&gt;Navigate to &lt;a href="https://cloud.logto.io/to/sign-in-experience/collect-user-profile" rel="noopener noreferrer"&gt;Console &amp;gt; Sign-in Experience &amp;gt; Collect User Profile&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Logto offers both primitive and composite field types designed for real-world use cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text&lt;/strong&gt; fields handle everything from names to job titles with smart length validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Number&lt;/strong&gt; fields capture ages, company sizes, and experience levels with range controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Date&lt;/strong&gt; fields support multiple international formats because not everyone writes dates the same way.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropdown&lt;/strong&gt; selects make choosing industries, departments, or countries effortless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Checkboxes&lt;/strong&gt; handle preferences and agreements without overwhelming users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;URL&lt;/strong&gt; fields automatically validate social profiles and websites.&lt;/li&gt;
&lt;li&gt;Need custom validation? &lt;strong&gt;Regex&lt;/strong&gt; fields let you enforce specific formats for employee IDs, or any proprietary data structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The composite fields are where things get exciting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full name&lt;/strong&gt; fields intelligently combine first, middle, and last names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address&lt;/strong&gt; fields collect complete location data with configurable components for different regional requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2izyj74bf1bukfy7dj00.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2izyj74bf1bukfy7dj00.png" alt="collect-user-profile.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every field becomes a conversion optimization opportunity through strategic customization.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Labels&lt;/strong&gt;, &lt;strong&gt;descriptions&lt;/strong&gt;, and &lt;strong&gt;placeholders&lt;/strong&gt; provide clear guidance without cluttering the interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type-specific configurations&lt;/strong&gt; ensure each field behaves optimally for its data type. E.g, min/max lengths for text, range limits for numbers, format enforcement for URLs, data format for dates, default value for checkboxes, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Required&lt;/strong&gt; versus &lt;strong&gt;optional&lt;/strong&gt; field configuration lets you balance data collection ambitions with completion rate realities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjie91rjqy4t9q1ejosmq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjie91rjqy4t9q1ejosmq.png" alt="customize-profile-fields.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Back to &lt;strong&gt;Collect user profile&lt;/strong&gt; list page, the drag-and-drop interface makes field reordering effortless, while real-time validation ensures optimal user experience before you go live.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Test with out-of-the-box sign-up flows
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;a href="https://cloud.logto.io/to/sign-in-experience" rel="noopener noreferrer"&gt;Console &amp;gt; Sign-in Experience&lt;/a&gt;, click "Live Preview". The Live Preview feature lets you experience your complete signup process exactly as your users will. Test every authentication method, validate field behavior, confirm brand consistency, and check mobile responsiveness.&lt;/p&gt;

&lt;p&gt;Create test accounts to validate the complete user journey, then manage them through &lt;a href="https://cloud.logto.io/to/users" rel="noopener noreferrer"&gt;Console &amp;gt; User Management&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuploads.strapi.logto.io%2Fsign_up_form_1ca80de50f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuploads.strapi.logto.io%2Fsign_up_form_1ca80de50f.png" alt="sign-up-form.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Publish and integrate
&lt;/h2&gt;

&lt;p&gt;Logto meets you where you are, offering integration paths that fit your team's workflow and technical preferences.&lt;/p&gt;

&lt;p&gt;Logto's comprehensive &lt;a href="https://docs.logto.io/quick-starts" rel="noopener noreferrer"&gt;SDK library&lt;/a&gt; transforms integration from weeks to hours. Frontend SDKs for React, Vue, Angular, and Vanilla JavaScript come with pre-built UI components. Backend SDKs cover Node.js, Python, .NET, Java, and Go for seamless server-side authentication. Mobile SDKs handle React Native, iOS, and Android development. Framework-specific integrations optimize for Next.js, Express, and Spring Boot environments.&lt;/p&gt;

&lt;p&gt;Or try a no-code integration solution powered by Cloudflare via &lt;a href="https://docs.logto.io/integrate-logto/protected-app" rel="noopener noreferrer"&gt;Protected App&lt;/a&gt; when you’re using Logto Cloud.&lt;/p&gt;

&lt;p&gt;Visit &lt;a href="https://cloud.logto.io/to/applications" rel="noopener noreferrer"&gt;Console &amp;gt; Applications&lt;/a&gt; for comprehensive guides, code samples, and quickstart templates tailored to your technology stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principles of high-converting sign-up forms
&lt;/h2&gt;

&lt;p&gt;Building registration forms that actually convert requires balancing ambition with user psychology:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Social authentication improves completion rates by 20-40% by eliminating password friction&lt;/li&gt;
&lt;li&gt;Every additional form field can reduce conversion by 10-15%, so collect only essential information upfront&lt;/li&gt;
&lt;li&gt;Smart MFA waits until the second login session rather than creating registration barriers&lt;/li&gt;
&lt;li&gt;Use progress indicators for multi-step flows and real-time validation that prevents errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Logto's no-code sign-up form builder incorporates these principles automatically, ensuring your registration flows optimize for both conversion and user satisfaction while maintaining enterprise-grade security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building effective &lt;strong&gt;sign-up forms&lt;/strong&gt; no longer requires months of development or choosing between user experience and security. Logto's no-code solution empowers teams to create sophisticated &lt;strong&gt;registration forms&lt;/strong&gt; that convert visitors into users while collecting the &lt;strong&gt;user profile&lt;/strong&gt; data that powers personalized experiences.&lt;/p&gt;

&lt;p&gt;Logto transforms user registration from a technical challenge into a competitive advantage that moves your business metrics.&lt;/p&gt;

&lt;p&gt;Ready to transform your user registration?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.logto.io" rel="noopener noreferrer"&gt;&lt;strong&gt;Logto Cloud&lt;/strong&gt;&lt;/a&gt; puts production-ready authentication at your fingertips:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Free Development tenant&lt;/strong&gt; lets you explore every feature without limits. &lt;strong&gt;Free Tier&lt;/strong&gt; includes up to 50,000 MAUs—perfect for validating your product-market fit. &lt;strong&gt;Pro Plan&lt;/strong&gt; starts at just $24/month for growing businesses that need advanced features and higher usage limits. &lt;strong&gt;Enterprise Solutions&lt;/strong&gt; provide custom deployments with dedicated support for scale.&lt;/p&gt;

&lt;p&gt;Prefer to keep everything in-house? &lt;a href="https://github.com/logto-io/logto" rel="noopener noreferrer"&gt;&lt;strong&gt;Logto OSS&lt;/strong&gt;&lt;/a&gt; delivers the complete open-source identity platform with full feature parity for independent deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Start building your perfect sign-up form today →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stop losing users to friction. Start converting them with Logto's intelligent sign-up form builder. Your conversion metrics and your users will thank you.&lt;/p&gt;

</description>
      <category>signup</category>
      <category>collectuserprofile</category>
      <category>userdata</category>
    </item>
    <item>
      <title>Logto 2025: scaling and trust</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Wed, 21 Jan 2026 03:51:30 +0000</pubDate>
      <link>https://dev.to/logto/logto-2025-scaling-and-trust-35ej</link>
      <guid>https://dev.to/logto/logto-2025-scaling-and-trust-35ej</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2025 was the year Logto got a lot bigger:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logto Cloud grew ~10x in MRR year over year&lt;/li&gt;
&lt;li&gt;Identities in Logto Cloud grew from under 1M to 2M+&lt;/li&gt;
&lt;li&gt;Logto OSS gained 2,000+ GitHub stars&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also served more enterprise customers, kept SOC 2 Type II current, improved GDPR-related work, and shipped a lot across authentication and authorization.&lt;/p&gt;

&lt;p&gt;More of our growth came from larger customers with stricter requirements around data residency and isolation, so we leaned heavily on Private Cloud there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Private Cloud: why enterprises picked it
&lt;/h2&gt;

&lt;p&gt;For enterprise teams, features are table stakes. The real decision is about the “boring” requirements: isolation, data residency, performance, security review, and reliability.&lt;/p&gt;

&lt;p&gt;Logto Private Cloud exists for that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data residency options that match compliance requirements&lt;/li&gt;
&lt;li&gt;infrastructure-as-code and flexible cloud setup, making rollouts smooth and scalable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: for one European organization, we deployed two Private Cloud instances in about a week. Each is sized for 1,000+ RPS with headroom.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we shipped
&lt;/h2&gt;

&lt;p&gt;We aim to keep changes practical and aligned with OIDC and OAuth. A few highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;more &lt;a href="https://docs.logto.io/integrations" rel="noopener noreferrer"&gt;connectors&lt;/a&gt; to reduce integration time across common IdPs and ecosystems&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.logto.io/integrate-logto/saml-app" rel="noopener noreferrer"&gt;Logto as a SAML IdP&lt;/a&gt; for better compatibility with enterprise and legacy systems&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.logto.io/security" rel="noopener noreferrer"&gt;CAPTCHA and security policies&lt;/a&gt; to reduce abuse and automated attacks&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.logto.io/end-user-flows/one-time-token" rel="noopener noreferrer"&gt;magic links&lt;/a&gt; for additional passwordless sign-in options and user invitation flows&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.logto.io/secret-vault" rel="noopener noreferrer"&gt;secret vault&lt;/a&gt; for federated token storage&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.logto.io/end-user-flows/collect-user-profile" rel="noopener noreferrer"&gt;user profile collection&lt;/a&gt; for onboarding and progressive profile completion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/logto-io/logto" rel="noopener noreferrer"&gt;Logto OSS&lt;/a&gt; gained 2,000+ stars in 2025, plus amazing community work like custom password hashing support and new connectors.&lt;/p&gt;

&lt;p&gt;Open source is how most people find Logto, test it, and decide whether to trust it. We’re not changing that.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP and agent auth
&lt;/h2&gt;

&lt;p&gt;We started &lt;a href="https://mcp-auth.dev/" rel="noopener noreferrer"&gt;MCP Auth&lt;/a&gt; work to support AI and agentic workflows. As more software becomes agent-driven, identity and authorization need to keep up. More on this in 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reliability: what changed for us
&lt;/h2&gt;

&lt;p&gt;In 2025, we saw fewer incidents caused by regressions. Most issues came from upstream dependencies or cloud infrastructure.&lt;/p&gt;

&lt;p&gt;That’s not an excuse to say it wasn’t on us. The biggest gap wasn’t the fix, it was speed and clarity of updates. We’re tightening that up.&lt;/p&gt;

&lt;h2&gt;
  
  
  2026 priorities
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;reliability, incident communication, and operational maturity&lt;/li&gt;
&lt;li&gt;making Logto the default choice for modern multi-tenant SaaS where security and UX both matter&lt;/li&gt;
&lt;li&gt;pushing forward on MCP and agentic auth&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building a SaaS or AI product and need modern auth that scales, Logto is built for it.&lt;/p&gt;



</description>
      <category>logto</category>
      <category>recap</category>
    </item>
    <item>
      <title>Logto product updates</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Wed, 21 Jan 2026 03:42:08 +0000</pubDate>
      <link>https://dev.to/logto/logto-product-updates-2fp</link>
      <guid>https://dev.to/logto/logto-product-updates-2fp</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We're excited to announce Logto v1.35.0, our December 2025 release! This update brings enhanced reCAPTCHA customization options, expanded support for third-party applications, and improved security features for passwordless authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  reCAPTCHA Gets More Flexible
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use reCAPTCHA Anywhere with Domain Customization
&lt;/h3&gt;

&lt;p&gt;One of the most requested features has been the ability to use reCAPTCHA in regions where Google's default domain may be inaccessible. With v1.35.0, you can now customize the reCAPTCHA domain to use alternatives like &lt;code&gt;recaptcha.net&lt;/code&gt;, ensuring your bot protection works seamlessly for users worldwide.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose Your Verification Style with Checkbox Mode
&lt;/h3&gt;

&lt;p&gt;reCAPTCHA Enterprise users now have a choice between two verification modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Invisible mode&lt;/strong&gt;: The default score-based verification that runs silently in the background, providing a frictionless user experience while still protecting against bots.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Checkbox mode&lt;/strong&gt;: The classic "I'm not a robot" widget that many users are familiar with. This mode provides explicit user interaction and can be useful when you want users to consciously acknowledge the verification step.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simply ensure your verification mode matches your reCAPTCHA key type configured in Google Cloud Console, and you're ready to go.&lt;/p&gt;

&lt;h2&gt;
  
  
  Third-party Apps: Now for SPA and Native Too
&lt;/h2&gt;

&lt;p&gt;Previously, only traditional web applications could be designated as third-party apps in Logto. This release removes that limitation, allowing you to create third-party single-page applications (SPA) and native applications.&lt;/p&gt;

&lt;p&gt;This enhancement opens up more flexible OAuth/OIDC integration scenarios, whether you're building a partner ecosystem, enabling third-party integrations, or managing multiple client applications with different trust levels.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enhanced Security for Passwordless Authentication
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Client IP Tracking
&lt;/h3&gt;

&lt;p&gt;For organizations that need additional security controls around passwordless authentication, we've added client IP address tracking to the connector message payload. The &lt;code&gt;SendMessageData&lt;/code&gt; type now includes an optional &lt;code&gt;ip&lt;/code&gt; field that HTTP email and SMS connectors can utilize for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt;: Prevent abuse by limiting requests from specific IP addresses&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fraud detection&lt;/strong&gt;: Identify suspicious patterns based on IP geolocation or reputation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit logging&lt;/strong&gt;: Maintain comprehensive logs for security compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Smarter Email/SMS Template Handling
&lt;/h2&gt;

&lt;p&gt;We've improved the template fallback logic for email and SMS connectors. If a usage-specific template isn't found, the system now gracefully falls back to the generic template. This includes checking the generic template with the default locale when locale-specific templates are unavailable, ensuring your users always receive properly formatted messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bug Fixes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SAML Integration Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extended relay state support&lt;/strong&gt;: The relay state column now supports up to 512 characters (previously 256), fixing integration issues with service providers like Firebase that generate longer relay state values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better error messages&lt;/strong&gt;: SAML authentication flow APIs now provide more straightforward error messages, making troubleshooting easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  API Parameter Fix
&lt;/h3&gt;

&lt;p&gt;Fixed a parameter naming issue in the SAML app creation API that could cause filter and paywall calculation errors.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;Ready to upgrade? Check out our &lt;a href="https://docs.logto.io/logto-oss/upgrading-oss-version" rel="noopener noreferrer"&gt;upgrade guide&lt;/a&gt; for step-by-step instructions.&lt;/p&gt;

&lt;p&gt;For the complete list of changes, see the &lt;a href="https://github.com/logto-io/logto/releases/tag/v1.35.0" rel="noopener noreferrer"&gt;GitHub release page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Have questions or feedback? Join us on &lt;a href="https://discord.gg/vRvwuwgpVX" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; or open an issue on &lt;a href="https://github.com/logto-io/logto/issues" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>release</category>
    </item>
    <item>
      <title>How to implement guest mode (anonymous users) and convert to Logto users</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Wed, 21 Jan 2026 03:31:17 +0000</pubDate>
      <link>https://dev.to/logto/how-to-implement-guest-mode-anonymous-users-and-convert-to-logto-users-44pj</link>
      <guid>https://dev.to/logto/how-to-implement-guest-mode-anonymous-users-and-convert-to-logto-users-44pj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many apps let users try features before signing up. Think shopping carts, document drafts, or saved preferences. Users expect this "guest mode" to just work.&lt;/p&gt;

&lt;p&gt;But if you're using Logto (or any OIDC provider) for authentication, you might wonder: how do I handle these anonymous users?&lt;/p&gt;

&lt;p&gt;The short answer: &lt;strong&gt;Logto handles authentication, your app handles guest sessions&lt;/strong&gt;. They're separate concerns.&lt;/p&gt;

&lt;p&gt;In this article, I'll show you a simple three-phase pattern to implement guest mode with Logto. You'll learn how to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manage guest sessions in your backend&lt;/li&gt;
&lt;li&gt;Let guests sign up through Logto&lt;/li&gt;
&lt;li&gt;Merge guest data to the real user account&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why there's no "anonymous login" in Logto
&lt;/h2&gt;

&lt;p&gt;You might expect Logto to have an "anonymous login" feature. Something like: call an API, get a token, no user interaction needed.&lt;/p&gt;

&lt;p&gt;But that's not how OIDC works. Here's why:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OIDC is built around user consent.&lt;/strong&gt; The whole point is to verify "who is this person?" An anonymous token would mean "this is someone, but we don't know who" — which defeats the purpose.&lt;/p&gt;

&lt;p&gt;Think of it this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; = proving identity ("who are you?")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session tracking&lt;/strong&gt; = remembering actions ("what did you do?")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Guest mode is about session tracking, not authentication. So it doesn't belong to your auth system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is actually good news.&lt;/strong&gt; It means you have a clean separation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logto handles identity (sign-up, sign-in, tokens)&lt;/li&gt;
&lt;li&gt;Your app handles guest sessions (before identity exists)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let each system do what it's designed for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-phase solution
&lt;/h2&gt;

&lt;p&gt;Here's the pattern: &lt;strong&gt;Guest → Auth → Merge&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4jy91cvpl1ebumi1o0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4jy91cvpl1ebumi1o0x.png" alt="mermaid-0" width="800" height="799"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Handle guest sessions without authentication
&lt;/h3&gt;

&lt;p&gt;Your backend creates and manages guest sessions. Logto isn't involved yet.&lt;/p&gt;

&lt;p&gt;When a user takes a meaningful action (like adding to cart), your backend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generates a guest ID (e.g., UUID)&lt;/li&gt;
&lt;li&gt;Returns it as a cookie or JWT&lt;/li&gt;
&lt;li&gt;Stores user actions under this guest ID&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep it simple. A &lt;code&gt;guest_sessions&lt;/code&gt; table with &lt;code&gt;guest_id&lt;/code&gt;, &lt;code&gt;data&lt;/code&gt;, and &lt;code&gt;created_at&lt;/code&gt; is enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Let users sign in with Logto
&lt;/h3&gt;

&lt;p&gt;When the user clicks "Sign up" or "Sign in", trigger the standard Logto OIDC flow.&lt;/p&gt;

&lt;p&gt;The guest ID stays in the cookie/storage during this process. After successful authentication, your frontend now has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An access token from Logto (user identity)&lt;/li&gt;
&lt;li&gt;The guest ID from before (guest data)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 3: Securely merge guest data to authenticated users
&lt;/h3&gt;

&lt;p&gt;Now connect the dots. Call your backend API with both:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /api/merge-guest
Authorization: Bearer &amp;lt;access_token&amp;gt;
Body: { "guestId": "guest_abc123" }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your backend must validate &lt;strong&gt;both&lt;/strong&gt; tokens before merging:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Validate the access token&lt;/strong&gt; → extracts user ID. See &lt;a href="https://docs.logto.io/authorization/validate-access-tokens" rel="noopener noreferrer"&gt;Validate access tokens&lt;/a&gt; for how to do this with Logto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate the guest ID&lt;/strong&gt; → confirm it's a real guest session &lt;strong&gt;your backend issued&lt;/strong&gt;. This is critical — never trust a guest ID from the client without verification.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only after both validations pass:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Merge guest data&lt;/strong&gt; to the user account&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invalidate the guest session&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The merge logic depends on your business. Shopping cart? Combine items. Document drafts? Transfer ownership. You decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to secure your merge endpoint with token validation
&lt;/h2&gt;

&lt;p&gt;The merge endpoint is a sensitive operation. A few things to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Always validate the access token.&lt;/strong&gt; Don't just read the user ID from the request body. Decode and verify the JWT. &lt;a href="https://docs.logto.io/authorization/validate-access-tokens" rel="noopener noreferrer"&gt;Here's how to do it with Logto&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Always validate the guest ID.&lt;/strong&gt; Check it exists in your database and hasn't expired. If you issued it as a JWT, verify the signature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require authentication.&lt;/strong&gt; The merge endpoint should reject requests without a valid access token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set a TTL for guest sessions.&lt;/strong&gt; Clean up abandoned sessions after 30 days (or whatever makes sense for your app).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Guest mode with Logto follows a simple pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Guest&lt;/strong&gt; (your app) → manage sessions before users sign up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt; (Logto) → handle sign-up and sign-in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge&lt;/strong&gt; (your app) → connect guest data to real users&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This pattern works with any OIDC provider, not just Logto. The key insight is: authentication and session tracking are separate concerns. Let each system do what it's built for.&lt;/p&gt;

</description>
      <category>guestmode</category>
      <category>anonymoususers</category>
      <category>userconversion</category>
    </item>
    <item>
      <title>Secure Google API access with OAuth authorization and token storage</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Tue, 19 Aug 2025 01:31:38 +0000</pubDate>
      <link>https://dev.to/logto/secure-google-api-access-with-oauth-authorization-and-token-storage-3k8g</link>
      <guid>https://dev.to/logto/secure-google-api-access-with-oauth-authorization-and-token-storage-3k8g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In today's interconnected digital landscape, applications that can effortlessly integrate with third-party services provide exceptional user experiences. Whether you're building a productivity suite, an AI agent, or a document collaboration platform, the ability to securely access and utilize APIs from services like Google, GitHub, Facebook, or any other services can transform your application from good to indispensable.&lt;/p&gt;

&lt;p&gt;Today, we'll explore how Logto's Secret Vault and Social Connector capabilities enable you to build a smart productivity application that integrates with Google APIs. We'll demonstrate secure token storage, retrieving access tokens for AI access, incremental authorization, and seamless third-party service integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  The challenge: Building a smart calendar assistant
&lt;/h2&gt;

&lt;p&gt;Imagine you're developing a "Smart Calendar Assistant", an application that helps users manage their schedules intelligently. Here's what your app needs to accomplish:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Basic authentication&lt;/strong&gt;: Users sign in with their Google account to access the app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profile management&lt;/strong&gt;: Display user's basic profile information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calendar integration&lt;/strong&gt;: Read calendar events to provide schedule insights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced features&lt;/strong&gt;: Create calendar events, send meeting invitations via Gmail, and manage Google Drive documents, but only when users explicitly request these premium features.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The challenge? You need different levels of Google API access at different times, and you must store tokens securely for ongoing API operations without constantly prompting users for re-authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution: Logto's incremental authorization with Secret Vault
&lt;/h2&gt;

&lt;p&gt;Logto's approach solves this elegantly through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimal initial scopes&lt;/strong&gt;: Request only essential permissions during sign-in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incremental authorization&lt;/strong&gt;: Request additional scopes on-demand for premium features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure token storage&lt;/strong&gt;: Store and manage access/refresh tokens in the encrypted Secret Vault.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic token refresh&lt;/strong&gt;: Handle token expiration transparently.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's walk through the implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Setting up Google connector with basic scopes
&lt;/h2&gt;

&lt;p&gt;First, create and configure your Google connector in Logto Console. During the initial setup, configure minimal scopes for basic authentication:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/calendar.readonly
openid
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;View &lt;a href="https://console.cloud.google.com/apis/library" rel="noopener noreferrer"&gt;Google API Library&lt;/a&gt; and &lt;a href="https://developers.google.com/identity/protocols/oauth2/scopes#firebasedataconnect" rel="noopener noreferrer"&gt;OAuth 2.0 scopes documentation&lt;/a&gt; to find the scopes you need for your application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Configuration Steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a Google OAuth client in &lt;a href="https://console.cloud.google.com/apis/credentials" rel="noopener noreferrer"&gt;Google Cloud Console&lt;/a&gt;. Check all scopes required for your application.&lt;/li&gt;
&lt;li&gt;Configure the &lt;a href="https://cloud.logto.io/to/connectors/social" rel="noopener noreferrer"&gt;Logto Google connector&lt;/a&gt; with your client credentials. Add the minimal scopes listed above in the &lt;code&gt;Scopes&lt;/code&gt; field.&lt;/li&gt;
&lt;li&gt;Enable &lt;strong&gt;Store tokens for persistent API access&lt;/strong&gt; in the connector settings.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Prompts&lt;/strong&gt; to include &lt;code&gt;consent&lt;/code&gt; and enable &lt;strong&gt;Offline Access&lt;/strong&gt; to ensure refresh tokens are issued.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read details in the Logto documentation on &lt;a href="https://docs.logto.io/integrations/google" rel="noopener noreferrer"&gt;Google connector setup&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This setup allows users to sign in and grants your app permission to read their calendar events. This is perfect for providing basic schedule insights.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Implementing sign-in flow
&lt;/h2&gt;

&lt;p&gt;Navigate to &lt;a href="https://cloud.logto.io/to/sign-in-experience/sign-up-and-sign-in" rel="noopener noreferrer"&gt;Logto &amp;gt; Sign-in experience &amp;gt; Sign-up and sign-in&lt;/a&gt;. Add the Google connector under Social sign-in section to let users authenticate with Google.&lt;/p&gt;

&lt;p&gt;When users sign in with Google, Logto automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authenticates the user with the configured scopes.&lt;/li&gt;
&lt;li&gt;Stores the access and refresh tokens securely in the Secret Vault.&lt;/li&gt;
&lt;li&gt;Returns user profile information to your application.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Your app receives the user session after successful Google sign-in&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userSession&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;logtoClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getIdTokenClaims&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Welcome &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userSession&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tokens are now securely stored and tied to the user's Google identity, ready for API calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Accessing Google APIs with stored tokens
&lt;/h2&gt;

&lt;p&gt;To read the user's calendar events, retrieve the stored access token and call the Google Calendar API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Retrieve the stored Google access token&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tokenResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/my-account/identities/google/access-token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userAccessToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Logto access token&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;accessToken&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;tokenResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Call Google Calendar API&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;calendarResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.googleapis.com/calendar/v3/calendars/primary/events&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;accessToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;calendarResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Logto handles token refresh automatically. If the access token is expired but a refresh token exists, Logto will obtain a new access token transparently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Incremental authorization for premium features
&lt;/h2&gt;

&lt;p&gt;When users want to access premium features (like creating calendar events or accessing Gmail), use Logto's Social Verification API to request additional scopes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Request additional scopes for premium features&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;verificationResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/verification/social&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userAccessToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;connectorId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;google-connector-id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;redirectUri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://yourapp.com/callback&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/gmail.send&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;verificationRecordId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;authorizationUri&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;verificationResponse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// Redirect user to Google for additional authorization&lt;/span&gt;
&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;authorizationUri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the user grants additional permissions, complete the verification and update the stored tokens:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Handle the callback and verify the authorization&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/verification/social/verify&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userAccessToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="nx"&gt;verificationRecordId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;connectorData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="cm"&gt;/* authorization code from callback */&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Update the stored token set with new scopes&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/my-account/identities/google/access-token&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;PATCH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;userAccessToken&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;socialVerificationId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;verificationRecordId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now your app can create calendar events and send emails with the updated token that includes the new scopes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Managing token status
&lt;/h2&gt;

&lt;p&gt;Logto Console provides comprehensive token management capabilities. Navigate to &lt;a href="https://cloud.logto.io/to/users" rel="noopener noreferrer"&gt;User Management &amp;gt; select a user &amp;gt; Social Connections&lt;/a&gt; to view:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Token Status&lt;/strong&gt;: Active, Expired, Inactive, or Not Applicable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Metadata&lt;/strong&gt;: Creation time, last update, expiration, and granted scopes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection Management&lt;/strong&gt;: View profile information synced from Google&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This visibility helps administrators understand user connection states and troubleshoot any token-related issues.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Google: Comprehensive third-party integration
&lt;/h2&gt;

&lt;p&gt;You can extend your Smart Calendar Assistant to integrate with various services beyond Google. Popular social connectors include &lt;a href="https://docs.logto.io/integrations/google" rel="noopener noreferrer"&gt;Google&lt;/a&gt; for authentication, calendar, and Gmail integration, &lt;a href="https://docs.logto.io/integrations/github" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; for code repositories and issue management, and &lt;a href="https://docs.logto.io/integrations/facebook" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt; for social features and marketing insights. Additional prebuilt connectors are coming soon to support token storage capabilities.&lt;/p&gt;

&lt;p&gt;For custom integrations, Logto provides flexible options through standard &lt;a href="https://docs.logto.io/integrations/oidc" rel="noopener noreferrer"&gt;OIDC&lt;/a&gt; or &lt;a href="https://docs.logto.io/integrations/oauth" rel="noopener noreferrer"&gt;OAuth 2.0&lt;/a&gt; connection. This comprehensive ecosystem allows you to connect with virtually any third-party service your organization uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and best practices
&lt;/h2&gt;

&lt;p&gt;Logto's Secret Vault employs enterprise-grade security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-secret encryption&lt;/strong&gt;: Each token set uses unique Data Encryption Keys (DEK)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key wrapping&lt;/strong&gt;: DEKs are encrypted with Key Encryption Keys (KEK)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal exposure&lt;/strong&gt;: Tokens are decrypted only when needed for API calls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic cleanup&lt;/strong&gt;: Tokens are deleted when users disconnect accounts or connectors are removed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Logto is a developer-friendly authentication platform that enables secure applications with comprehensive third-party service integration.&lt;/p&gt;

&lt;p&gt;With Logto's incremental authorization and secure token storage, your Smart Calendar Assistant delivers seamless user experience balancing functionality with security. Users enjoy frictionless onboarding through single sign-on requesting only minimal permissions for core features. As they explore advanced capabilities, progressive enhancement unlocks premium features through natural, contextual permission requests.&lt;/p&gt;

&lt;p&gt;Persistent access via securely stored tokens enables ongoing API operations without constantly interrupting users for re-authentication, creating smooth professional experience. This system is built with security by design, leveraging enterprise-grade encryption to protect user credentials and maintain trust.&lt;/p&gt;

&lt;p&gt;Ready to build your own third-party API integration? Here's how to start:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Set up Logto&lt;/strong&gt;: Create your Logto tenant and &lt;a href="https://cloud.logto.io/to/connectors/social" rel="noopener noreferrer"&gt;configure your first social connector&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable token storage&lt;/strong&gt;: Turn on "Store tokens for persistent API access" in your connector settings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement incremental Auth&lt;/strong&gt;: Use the Social Verification API for on-demand scope requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build and scale&lt;/strong&gt;: Expand to additional providers using Logto's comprehensive connector ecosystem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The future of application development lies in seamless service integration. With Logto's Secret Vault and Connectors, you have the tools to build applications that are not just functional, but truly interconnected with the services your users rely on daily.&lt;/p&gt;

&lt;p&gt;Want to explore more? Check out our &lt;a href="https://docs.logto.io/secret-vault/federated-token-set" rel="noopener noreferrer"&gt;integration guides&lt;/a&gt; and start building your next connected application today.&lt;/p&gt;



</description>
      <category>secretvault</category>
      <category>tokenstorage</category>
      <category>thirdpartyservices</category>
    </item>
    <item>
      <title>Using Bolt.New and Logto to quickly build your custom login flows</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Mon, 18 Aug 2025 12:33:48 +0000</pubDate>
      <link>https://dev.to/logto/using-boltnew-and-logto-to-quickly-build-your-custom-login-flows-3ld6</link>
      <guid>https://dev.to/logto/using-boltnew-and-logto-to-quickly-build-your-custom-login-flows-3ld6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Bolt.New
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bolt.new&lt;/strong&gt; is a browser-based tool for generating and running full-stack web applications instantly. Built on top of &lt;strong&gt;StackBlitz’s WebContainer technology&lt;/strong&gt;, it gives developers a clean, pre-configured stack that includes Next.js (App Router), Tailwind CSS, Supabase, Prisma, and ShadCN UI. The entire environment runs locally in the browser, no installations, no cloud build steps, and no signup required.&lt;/p&gt;

&lt;p&gt;Unlike tools that focus on AI-assisted coding inside an existing project, Bolt.new focuses on &lt;strong&gt;the beginning of the development process&lt;/strong&gt;. It removes the overhead of setting up project structure, dependencies, and local servers, letting you go from idea to working prototype in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  How is Bolt.new different from Cursor or Lovable?
&lt;/h2&gt;

&lt;p&gt;While tools like &lt;strong&gt;Cursor&lt;/strong&gt; and &lt;strong&gt;Lovable&lt;/strong&gt; serve as AI copilots inside your code editor, &lt;strong&gt;Bolt.new&lt;/strong&gt; focuses on something else entirely: &lt;strong&gt;instant, full-stack project generation and execution&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; enhances VS Code workflows with AI, helping you edit or generate code in your existing environment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bolt.new&lt;/strong&gt; creates a working app from scratch based on a prompt or template, and runs it instantly inside the browser using WebContainers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s no dependency on local tools or remote cloud VMs. Everything runs in-browser with native support for Node.js, package management, and full-stack development. This makes it particularly well-suited for fast prototyping and local-first experimentation, especially in AI or SaaS project contexts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who is Bolt.new for?
&lt;/h2&gt;

&lt;p&gt;Bolt.new is designed for developers who often start from scratch such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Indie hackers validating product ideas&lt;/li&gt;
&lt;li&gt;AI builders testing workflows or embedding models&lt;/li&gt;
&lt;li&gt;Founders prototyping MVPs&lt;/li&gt;
&lt;li&gt;Engineers creating internal tools or demos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These users are typically comfortable with the modern web stack and prefer tools that are fast, clean, and non-opinionated. Bolt.new is not a visual site builder or tutorial-driven platform. It assumes a working knowledge of React and full-stack development but removes setup friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  The history and evolution of Bolt.new
&lt;/h2&gt;

&lt;p&gt;Bolt.new was created by the team behind &lt;strong&gt;StackBlitz&lt;/strong&gt;, a company founded in 2017 by Eric Simons and Albert Pai. StackBlitz pioneered &lt;strong&gt;WebContainers&lt;/strong&gt;, a browser-native WebAssembly runtime capable of executing Node.js environments directly inside the browser. This eliminated the need for cloud servers or local installations when developing modern JavaScript applications.&lt;/p&gt;

&lt;p&gt;In 2023, StackBlitz faced a turning point. Growth had slowed, and the team explored a more radical direction: combining WebContainers with AI to generate fully functional applications from natural language prompts.&lt;/p&gt;

&lt;p&gt;This experiment became &lt;strong&gt;Bolt.new&lt;/strong&gt;, which launched publicly in October 2024. Within weeks, it gained significant traction among developers for its simplicity and speed. The tool combined everything StackBlitz had built over years, runtime isolation, fast dependency installation, and shareable environments, with an AI interface that understood common development goals.&lt;/p&gt;

&lt;p&gt;Bolt.new marked a shift in developer tooling: instead of just writing code faster, developers could now &lt;strong&gt;start with code that was already running&lt;/strong&gt;, tailored to their intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guide: Use Logto and Bolt.New to add a custom log-in experience
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Register an app in Logto console
&lt;/h3&gt;

&lt;p&gt;In this example, I used &lt;a href="http://bolt.new/" rel="noopener noreferrer"&gt;Bolt.new&lt;/a&gt; to create a CMS app. I skipped the prompt phase and went straight to the point: I asked the agent to build a CMS with Logto as the authentication provider.&lt;/p&gt;

&lt;p&gt;According to the instructions, I needed to provide two key pieces of information:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Logto endpoint&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;App ID&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Since the app is a single-page React application, no app secret is needed. The agent handled the rest: it installed the latest &lt;a href="https://docs.logto.io/quick-starts/react" rel="noopener noreferrer"&gt;Logto React SDK&lt;/a&gt;, set up authentication components, and wired everything together.&lt;/p&gt;

&lt;p&gt;To complete the setup, I went to the &lt;a href="https://cloud.logto.io/" rel="noopener noreferrer"&gt;Logto Cloud Console&lt;/a&gt;, created a new single-page application, and copied the Logto endpoint and App ID into Bolt.new.&lt;/p&gt;

&lt;p&gt;Then configure the &lt;a href="https://auth.wiki/redirect-uri" rel="noopener noreferrer"&gt;Redirect URIs&lt;/a&gt; and Post sign-out redirect URIs.&lt;/p&gt;

&lt;p&gt;One important detail: because Bolt.new is browser-based and not a local IDE, you can’t use &lt;code&gt;http://localhost:3000/&lt;/code&gt;as your redirect URI. Instead, make sure to use the preview URL shown in the Bolt.new browser tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuw5ugaq0vpp5c365dr2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuw5ugaq0vpp5c365dr2b.png" alt="bolt_auth_1.png" width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Customize Logto pre-built sign in experience
&lt;/h3&gt;

&lt;p&gt;Logto provides a configurable, pre-built sign-in flow that you can customize in the Console. To get started, go to &lt;strong&gt;Sign-in Experience&lt;/strong&gt; &amp;gt; &lt;strong&gt;Sign-in &amp;amp; Sign-up&lt;/strong&gt;, then choose your preferred sign-in methods (such as email, username, phone number, or social login).&lt;/p&gt;

&lt;p&gt;Once configured, triggering the sign-in flow will redirect users to Logto’s hosted sign-in page with your selected options. The entire authentication process is handled by Logto, and users are returned to your app after signing in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12nhosz8bs93n4qh1u4n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F12nhosz8bs93n4qh1u4n.png" alt="bolt_auth_2.png" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22vq33ippmu33nqqubq3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22vq33ippmu33nqqubq3.png" alt="bolt_auth_3.png" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
This assumes you’ve already set up the Google and GitHub connectors correctly. If not, you can follow the setup guide &lt;a href="https://docs.logto.io/connectors" rel="noopener noreferrer"&gt;https://docs.logto.io/connectors&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7k8d2lrcca8v6rnnx3uw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7k8d2lrcca8v6rnnx3uw.png" alt="bolt_auth_4.png" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a floating login panel above your product
&lt;/h3&gt;

&lt;p&gt;Now I want to go a step further and build a more customized sign-in experience, similar to what Perplexity offers. Instead of redirecting to a separate page, I’ll place a &lt;strong&gt;floating login panel directly on top of the product UI&lt;/strong&gt;. This keeps users in context while still using Logto’s authentication flow underneath.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5so0na4jkripwznl9kh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5so0na4jkripwznl9kh0.png" alt="bolt_auth_5.png" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I just use this prompt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I want to make the sign-in page look better, just a floating panel on the bottom right corner. With two buttons: one for “Sign In” and one for “Create Account.” Each button should redirect to a different screen, handled by Logto. Using first-screen experience documented in Logto &lt;a href="https://docs.logto.io/end-user-flows/authentication-parameters/first-screen" rel="noopener noreferrer"&gt;https://docs.logto.io/end-user-flows/authentication-parameters/first-screen&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7isgn80y53t0s02rr3ui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7isgn80y53t0s02rr3ui.png" alt="bolt_auth_6.png" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The nice part is, when you click Sign In, it goes straight to the sign-in page. If you click Create Account, it opens directly to the account creation screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevpo9jcr1vn8ph1ere1k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fevpo9jcr1vn8ph1ere1k.png" alt="bolt_auth_7.png" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ewb3nt7mcj9raqadka0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ewb3nt7mcj9raqadka0.png" alt="bolt_auth_8.png" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add social flows
&lt;/h3&gt;

&lt;p&gt;You can provide the agent with &lt;a href="https://docs.logto.io/end-user-flows/authentication-parameters/direct-sign-in" rel="noopener noreferrer"&gt;Logto’s direct sign-in documentation&lt;/a&gt; along with a prompt like “add social sign-in flows.” This allows you to skip the default Logto landing screen. For example, clicking the &lt;strong&gt;Google Sign-In&lt;/strong&gt; button will immediately launch the Google authentication flow, giving users a faster and more friendly login experience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5ckbydo2mv5kg81pgte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5ckbydo2mv5kg81pgte.png" alt="bolt_auth_9.png" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Logto’s upcoming update will support AI-powered auth integration
&lt;/h2&gt;

&lt;p&gt;This is just a basic example. Logto is currently building &lt;strong&gt;MCP servers&lt;/strong&gt; that run directly inside your IDE, allowing you to interact with the &lt;strong&gt;Logto Console&lt;/strong&gt; and &lt;strong&gt;Management API&lt;/strong&gt; without ever leaving your development environment.&lt;/p&gt;

&lt;p&gt;With this setup, you’ll be able to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create and manage users&lt;/li&gt;
&lt;li&gt;View and filter logs&lt;/li&gt;
&lt;li&gt;Configure login and sign-up flows&lt;/li&gt;
&lt;li&gt;Define API resources, permissions, and roles&lt;/li&gt;
&lt;li&gt;Manage applications and access settings&lt;/li&gt;
&lt;li&gt;And more&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By combining local tooling with AI and Logto’s infrastructure, authentication is no longer a painful integration step, it becomes part of your natural development flow.&lt;/p&gt;



</description>
      <category>bolt</category>
      <category>ai</category>
      <category>directsignin</category>
    </item>
    <item>
      <title>Why AI startups choose Supabase and where it falls short</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Mon, 18 Aug 2025 08:00:20 +0000</pubDate>
      <link>https://dev.to/logto/why-ai-startups-choose-supabase-and-where-it-falls-short-2690</link>
      <guid>https://dev.to/logto/why-ai-startups-choose-supabase-and-where-it-falls-short-2690</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Supabase?
&lt;/h2&gt;

&lt;p&gt;Supabase is an open-source Backend-as-a-Service (BaaS) platform that has become increasingly popular among AI startups and developers building intelligent applications. Often described as the "open-source alternative to Firebase," Supabase combines a PostgreSQL database, real-time subscriptions, authentication, instant APIs, and storage into a unified platform that prioritizes developer experience and rapid deployment.&lt;/p&gt;

&lt;p&gt;Built on top of enterprise-grade tools like PostgreSQL, PostgREST, GoTrue, and Realtime, Supabase offers developers the power of SQL databases with the simplicity of modern web development. The platform automatically generates RESTful APIs from your database schema and provides real-time functionality out of the box, making it particularly attractive for AI companies that need to iterate quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI startups are choosing Supabase
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rapid development speed - The primary driver
&lt;/h3&gt;

&lt;p&gt;Just like Supabase’s slogan, Build in a weekendScale to millions. The main attraction of Supabase for AI companies lies in its ability to accelerate development cycles. In the fast-paced AI industry where time-to-market is crucial, startups cannot afford to be slowed down by complex backend setup. Supabase allows AI developers to focus on their core product developenebt and user experience rather than spending weeks configuring databases, authentication systems, and APIs.&lt;/p&gt;

&lt;p&gt;One of my friends pointed out that as an entrepreneur, testing and quick pivoting are inevitable — so development speed really matters. Supabase’s quick setup, all-in-one services, and affordable pricing make it a great fit for fast-moving developers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cost-effective solution for startups
&lt;/h3&gt;

&lt;p&gt;Compared to self-hosted AWS solutions or enterprise-grade alternatives, Supabase offers compelling pricing that aligns with startup budgets. The generous free tier allows AI companies to prototype and validate their ideas without upfront infrastructure costs, while the transparent pricing structure makes it easy to predict scaling costs as the product grows.&lt;/p&gt;

&lt;p&gt;For many AI startups bootstrapping their operations, the cost savings compared to traditional cloud services can be substantial, allowing them to allocate more resources to AI model development and talent acquisition.&lt;/p&gt;

&lt;h3&gt;
  
  
  PostgreSQL foundation for AI workloads
&lt;/h3&gt;

&lt;p&gt;Supabase's PostgreSQL foundation provides several advantages for AI applications. PostgreSQL's support for JSON data types, advanced indexing, and extensions like pgvector make it suitable for storing embeddings, model outputs, and complex AI-generated data structures. This eliminates the need for multiple specialized databases in many AI use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-Era development patterns
&lt;/h3&gt;

&lt;p&gt;An interesting phenomenon in the AI development space is that AI models themselves have been trained on vast amounts of code that uses Supabase, making AI coding assistants particularly effective at generating Supabase-related code. This creates a virtuous cycle where AI developers can leverage AI tools to build on Supabase more efficiently, further accelerating development speed. That’s what it means to build a product the ecosystem wants to adopt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Supabase stands in the Backend-as-a-Service ecosystem
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Supabase vs Traditional cloud services
&lt;/h3&gt;

&lt;p&gt;Compared to AWS and other traditional cloud providers, Supabase offers significant advantages in developer experience and setup simplicity. While AWS provides more granular control and enterprise features, the complexity can be overwhelming for small AI teams that need to move fast. Supabase abstracts away much of this complexity while still providing the core functionality most AI applications need.&lt;/p&gt;

&lt;p&gt;However, this simplicity comes with trade-offs. Large-scale AI companies often find they need more specialized services as they grow, leading some to eventually migrate to more traditional cloud architectures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Competition from lightweight alternatives
&lt;/h3&gt;

&lt;p&gt;Supabase competes with other developer-friendly platforms like Fly.io, Railway, and various serverless solutions. Each has its strengths, but Supabase's combination of database, authentication, and real-time features in a single platform gives it an edge for full-stack AI applications.&lt;/p&gt;

&lt;p&gt;For vector search specifically, some AI companies choose specialized services like Pinecone or Weaviate instead of relying on Supabase's pgvector extension, especially for applications requiring high-performance similarity search at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  Market positioning: SMB vs Enterprise
&lt;/h3&gt;

&lt;p&gt;Supabase has found its sweet spot in the small to medium business market, particularly among startups and indie developers. The platform excels at serving companies that need to build and deploy quickly without the overhead of enterprise infrastructure.&lt;/p&gt;

&lt;p&gt;However, as AI companies grow and their requirements become more complex, many find themselves needing more specialized solutions for permissions management, multi-tenancy, or compliance requirements that enterprise-focused alternatives handle better out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Supabase pricing structure
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Free Tier - Perfect for AI prototyping
&lt;/h3&gt;

&lt;p&gt;Great for prototypes, testing, and small projects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited API requests&lt;/li&gt;
&lt;li&gt;Up to 50,000 monthly active users (MAUs)&lt;/li&gt;
&lt;li&gt;500 MB database size&lt;/li&gt;
&lt;li&gt;Shared CPU and 500 MB RAM&lt;/li&gt;
&lt;li&gt;5 GB bandwidth&lt;/li&gt;
&lt;li&gt;1 GB file storage&lt;/li&gt;
&lt;li&gt;Community support&lt;/li&gt;
&lt;li&gt;Projects are paused after 1 week of inactivity&lt;/li&gt;
&lt;li&gt;Limit of 2 active projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This lets AI teams build and test their MVPs without worrying about infrastructure costs, important for validating product-market fit. Many AI coding agents support Supabase integration. For example, you can design both the front-end and back-end in Lovable, and use Supabase as your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pro Plan (From $25 / month)
&lt;/h3&gt;

&lt;p&gt;Most popular — for production-ready apps with room to scale.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Includes $10 in compute credits&lt;/li&gt;
&lt;li&gt;Everything in the Free Plan, plus:

&lt;ul&gt;
&lt;li&gt;100,000 MAUs included, then $0.00325 per extra MAU&lt;/li&gt;
&lt;li&gt;8 GB database (then $0.125 per GB)&lt;/li&gt;
&lt;li&gt;250 GB bandwidth (then $0.09 per GB)&lt;/li&gt;
&lt;li&gt;100 GB file storage (then $0.021 per GB)&lt;/li&gt;
&lt;li&gt;Email support&lt;/li&gt;
&lt;li&gt;Daily backups (stored for 7 days)&lt;/li&gt;
&lt;li&gt;Log retention (7 days)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Team Plan (From $599 / month)
&lt;/h3&gt;

&lt;p&gt;For teams needing &lt;a href="https://auth.wiki/enterprise-sso" rel="noopener noreferrer"&gt;SSO&lt;/a&gt;, backup controls, and compliance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Everything in the Pro Plan, plus:

&lt;ul&gt;
&lt;li&gt;SOC2 compliance&lt;/li&gt;
&lt;li&gt;Project-scoped and read-only access&lt;/li&gt;
&lt;li&gt;HIPAA support (as a paid add-on)&lt;/li&gt;
&lt;li&gt;SSO for Supabase Dashboard&lt;/li&gt;
&lt;li&gt;Priority email support and SLAs&lt;/li&gt;
&lt;li&gt;Daily backups (stored for 14 days)&lt;/li&gt;
&lt;li&gt;Log retention (28 days)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enterprise (Custom pricing)
&lt;/h3&gt;

&lt;p&gt;For large-scale, high-demand applications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dedicated support manager&lt;/li&gt;
&lt;li&gt;Uptime SLAs&lt;/li&gt;
&lt;li&gt;Bring Your Own Cloud (BYO Cloud)&lt;/li&gt;
&lt;li&gt;24×7×365 premium enterprise support&lt;/li&gt;
&lt;li&gt;Private Slack channel&lt;/li&gt;
&lt;li&gt;Support for custom security questionnaires&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Supabase authentication capabilities for AI products
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core authentication methods
&lt;/h3&gt;

&lt;p&gt;Supabase provides authentication suitable for AI applications handling user data and personalized experiences:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Email and password authentication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure user registration and login&lt;/li&gt;
&lt;li&gt;Email &lt;a href="https://auth.wiki/passwordless" rel="noopener noreferrer"&gt;passwordless authentication&lt;/a&gt; workflows important for AI applications&lt;/li&gt;
&lt;li&gt;Password reset functionality&lt;/li&gt;
&lt;li&gt;Customizable email templates for branded experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Social &lt;a href="https://auth.wiki/oauth-2.0" rel="noopener noreferrer"&gt;OAuth&lt;/a&gt; providers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google, GitHub, Discord, Facebook integration&lt;/li&gt;
&lt;li&gt;Apple, Twitter, LinkedIn, and more&lt;/li&gt;
&lt;li&gt;One-click social login implementation&lt;/li&gt;
&lt;li&gt;Automatic user profile synchronization for personalized AI experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://auth.wiki/magic-link" rel="noopener noreferrer"&gt;Magic Link&lt;/a&gt; authentication&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passwordless login via email&lt;/li&gt;
&lt;li&gt;Enhanced user experience for AI tools&lt;/li&gt;
&lt;li&gt;Reduced security risks&lt;/li&gt;
&lt;li&gt;Perfect for AI applications requiring quick access&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Advanced security features
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Row Level Security (RLS)&lt;/strong&gt;&lt;br&gt;
Critical for AI applications, Supabase's RLS policies ensure users only access their own data, conversations, and AI-generated content. These policies operate at the database level, providing robust isolation between users' AI interactions and personal data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JWT token management&lt;/strong&gt;&lt;br&gt;
Automatic &lt;a href="https://auth.wiki/jwt" rel="noopener noreferrer"&gt;JWT&lt;/a&gt; token generation and validation with customizable expiration times. AI applications can securely authenticate API calls to external AI services while maintaining user context throughout complex AI workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://auth.wiki/mfa" rel="noopener noreferrer"&gt;Multi-factor authentication (MFA)&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Built-in support for &lt;a href="https://auth.wiki/totp" rel="noopener noreferrer"&gt;TOTP&lt;/a&gt;-based MFA adds security for AI applications handling sensitive data or providing access to premium AI models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supabase's limitations and considerations
&lt;/h2&gt;

&lt;p&gt;While Supabase is a powerful and developer-friendly backend platform, offering database, storage, authentication, and serverless functions out of the box but it has notable limitations when it comes to &lt;strong&gt;enterprise-grade identity and &lt;a href="https://auth.wiki/authorization" rel="noopener noreferrer"&gt;authorization&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  No OIDC provider support
&lt;/h3&gt;

&lt;p&gt;Supabase &lt;strong&gt;does not support acting as an &lt;a href="https://auth.wiki/openid-connect" rel="noopener noreferrer"&gt;OpenID Connect (OIDC) Provider&lt;/a&gt;&lt;/strong&gt;. This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You cannot use Supabase to &lt;strong&gt;federate identity to other systems&lt;/strong&gt;, i.e. it cannot serve as a central identity provider for other applications.&lt;/li&gt;
&lt;li&gt;Supabase &lt;strong&gt;cannot issue standards-compliant ID tokens&lt;/strong&gt; for third-party clients to consume.&lt;/li&gt;
&lt;li&gt;It lacks support for &lt;strong&gt;custom claims&lt;/strong&gt;, &lt;strong&gt;token introspection&lt;/strong&gt;, &lt;strong&gt;scoped access&lt;/strong&gt;, or fine-grained session/token management, all of which are essential for &lt;a href="https://auth.wiki/oauth-2.1" rel="noopener noreferrer"&gt;OAuth 2.1&lt;/a&gt; / OIDC-compliant systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of Logto customers complains:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And yes, I know there's &lt;strong&gt;Supabase&lt;/strong&gt;, but as far as I can tell, that will require custom OIDC middleware in order to act as my &lt;a href="https://auth.wiki/identity-provider" rel="noopener noreferrer"&gt;IdP&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In contrast, platforms like &lt;strong&gt;&lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, Auth0, or Keycloak&lt;/strong&gt; can act as a fully compliant OIDC Provider, supporting complex login workflows, SSO federation, and secure token issuance, critical for multi-system identity architectures.&lt;/p&gt;

&lt;p&gt;Especially in the AI era, if you want your product to work with AI agents or act as an &lt;a href="https://blog.logto.io/what-is-mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; server, it needs to support OAuth or OIDC. Without this, your product can’t participate in the OAuth-based ecosystem that AI agents rely on, which means missing out on major integration opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weak authorization model (RBAC/ABAC)
&lt;/h3&gt;

&lt;p&gt;Supabase also lacks a built-in authorization framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There is no native &lt;a href="https://auth.wiki/rbac" rel="noopener noreferrer"&gt;RBAC (role-based access control)&lt;/a&gt; system for assigning roles to users or defining permissions.&lt;/li&gt;
&lt;li&gt;You must manually implement authorization logic using PostgreSQL Row-Level Security (RLS): a powerful but low-level feature that’s difficult to manage as your product scales.&lt;/li&gt;
&lt;li&gt;There is no &lt;a href="https://auth.wiki/multi-tenancy" rel="noopener noreferrer"&gt;organization&lt;/a&gt;/team hierarchy, no user-role mapping UI, and no ability to apply conditional access policies based on roles, tenant ownership, or permissions.&lt;/li&gt;
&lt;li&gt;There’s no concept of access scopes or policies bound to tokens, making it hard to integrate with secure APIs or microservices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes Supabase less suitable for &lt;strong&gt;multi-tenant SaaS products&lt;/strong&gt;, &lt;strong&gt;B2B platforms&lt;/strong&gt;, or anything requiring enterprise-grade access control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workarounds and common practices
&lt;/h3&gt;

&lt;p&gt;Because of these limitations, many teams use Supabase &lt;strong&gt;together with a dedicated identity provider&lt;/strong&gt; such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://logto.io/" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;&lt;/strong&gt; – An open-source auth solution with full OIDC Provider support, RBAC, organization management, and &lt;a href="https://auth.wiki/multi-tenancy" rel="noopener noreferrer"&gt;multi-tenant auth&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth0 / Okta&lt;/strong&gt; – Commercial identity platforms with extensive protocol and security support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clerk / Descope&lt;/strong&gt; – Developer-first auth tools with more visual control over identity flows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These systems handle user authentication, SSO, and authorization logic, while Supabase continues to provide data storage, edge functions, and real-time APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary: Where Supabase falls short
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Capability&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Supabase Status&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Limitation&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OIDC Provider&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;td&gt;Cannot expose user pool to third-party apps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token Customization&lt;/td&gt;
&lt;td&gt;❌ Minimal&lt;/td&gt;
&lt;td&gt;No custom claims, scopes, or introspection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RBAC&lt;/td&gt;
&lt;td&gt;❌ Manual via RLS&lt;/td&gt;
&lt;td&gt;No native roles/permissions system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Org/Tenant Hierarchy&lt;/td&gt;
&lt;td&gt;❌ Not supported&lt;/td&gt;
&lt;td&gt;No built-in support for orgs, teams, or role mapping&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual Policy Management&lt;/td&gt;
&lt;td&gt;❌ Missing&lt;/td&gt;
&lt;td&gt;Must manage all logic via SQL/RLS manually&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In short, Supabase excels at providing a developer-first backend experience, but when it comes to &lt;strong&gt;secure identity, SSO, and advanced authorization&lt;/strong&gt;, it lacks the primitives and abstractions that modern applications demand. If your product involves &lt;strong&gt;multi-tenant auth&lt;/strong&gt;, &lt;strong&gt;enterprise SSO&lt;/strong&gt;, or &lt;strong&gt;fine-grained access control&lt;/strong&gt;, pairing Supabase with a purpose, built identity solution is not just recommended.&lt;/p&gt;

&lt;h3&gt;
  
  
  Migration path for growing companies
&lt;/h3&gt;

&lt;p&gt;Many AI companies view Supabase as an excellent starting point but plan eventual migration to more specialized services as they scale. This "graduate and migrate" pattern is common, where startups begin with Supabase for speed, then move to enterprise solutions for advanced features.&lt;/p&gt;

&lt;h2&gt;
  
  
  Future outlook and recommendations regarding Supabase
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ideal use cases for AI startups
&lt;/h3&gt;

&lt;p&gt;Supabase is particularly well-suited for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI MVP development&lt;/strong&gt;: Rapid prototyping and validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small to medium-scale AI applications&lt;/strong&gt;: Up to thousands of users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer tools and AI-assisted applications&lt;/strong&gt;: Where development speed is crucial&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consumer AI applications&lt;/strong&gt;: Simple user management and data storage needs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to consider alternatives
&lt;/h3&gt;

&lt;p&gt;AI companies should evaluate alternatives when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complex multi-tenancy requirements&lt;/strong&gt;: Enterprise B2B products with sophisticated permission models&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-scale vector operations&lt;/strong&gt;: Applications requiring specialized vector database performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict compliance requirements&lt;/strong&gt;: Industries with specific regulatory needs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex integration needs&lt;/strong&gt;: Applications requiring deep integration with enterprise systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Strategic recommendations
&lt;/h3&gt;

&lt;p&gt;For AI startups considering Supabase:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with Supabase&lt;/strong&gt; for rapid development and validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan for potential migration&lt;/strong&gt; as you scale and requirements become more complex&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluate permission requirements early&lt;/strong&gt; to understand if custom development will be needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider hybrid approaches&lt;/strong&gt; using Supabase for core functionality while integrating specialized services for specific needs&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Build AI-Ready applications with Supabase’s backend stack and Logto’s auth system
&lt;/h2&gt;

&lt;p&gt;Supabase has become a go-to for a lot of AI startups, mostly because it helps you move fast when speed matters. It’s probably not where you’ll scale forever, but it’s a solid launchpad that gets the job done—especially when you want to focus on your core AI work, not backend plumbing.&lt;/p&gt;

&lt;p&gt;The dev experience is smooth, pricing is reasonable, and the feature set covers most of what you need early on. Just make sure you know where it might hit limits, and have a plan for how you’ll evolve as your needs change.&lt;/p&gt;

&lt;p&gt;If your goal is to get from idea to working product as quickly and cost-effectively as possible, Supabase is honestly one of the best ways to do it.&lt;/p&gt;

&lt;p&gt;That said, when it comes to auth, especially if you’re building for AI agents or planning to support OAuth/OIDC flows, you’ll want something more purpose-built. That’s where &lt;strong&gt;Logto&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;It’s open-source, developer-friendly, and designed from the ground up to support modern identity use cases, including AI agent auth and MCP-style infrastructure. If you’re already on Supabase, plugging in Logto gives you a full-featured identity layer without having to build it all yourself.&lt;/p&gt;

&lt;p&gt;We’ve put together a simple &lt;a href="https://docs.logto.io/docs/guides/integrate-with-supabase/" rel="noopener noreferrer"&gt;Logto + Supabase integration guide&lt;/a&gt; that walks you through the setup, so you can get sign-up, login, and session management running in minutes.&lt;/p&gt;



</description>
      <category>supabase</category>
      <category>ai</category>
      <category>auth</category>
    </item>
    <item>
      <title>Top coding agents in 2025: Tools that actually help you build</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Mon, 18 Aug 2025 08:00:04 +0000</pubDate>
      <link>https://dev.to/logto/top-coding-agents-in-2025-tools-that-actually-help-you-build-3cgd</link>
      <guid>https://dev.to/logto/top-coding-agents-in-2025-tools-that-actually-help-you-build-3cgd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The software development world is flooded with "AI agents" in 2025. Most promise to write your code, finish your tasks, and ship your app while you sleep. The reality? Some are noise. A few are signal.&lt;/p&gt;

&lt;p&gt;But a handful of tools actually deliver real leverage. They fit into your workflow, take things off your plate, and help you build faster, especially when you're short on time or context switching too much. These aren't just copilots or chatbots. They're hands-on agents that help you move from vague ideas to working software.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a good coding agent
&lt;/h2&gt;

&lt;p&gt;Good coding agents don't just autocomplete. They understand context, work across files, and integrate into how you actually build software. The best ones feel like pairing with someone who knows your stack, not fighting with a glorified autocomplete tool.&lt;/p&gt;

&lt;p&gt;The tools that work fit into how developers actually build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They understand your whole project, not just the current file&lt;/li&gt;
&lt;li&gt;They can make real changes, not just suggestions&lt;/li&gt;
&lt;li&gt;They stay out of your way when you're in flow&lt;/li&gt;
&lt;li&gt;They handle the boring stuff so you can focus on the interesting problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the following list, I’ll use &lt;code&gt;build a photo gallery app&lt;/code&gt; as a prompt to evaluate the output.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Cursor - The power tool for developers who live in their editor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://cursor.sh/" rel="noopener noreferrer"&gt;cursor.sh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cursor is a fork of VS Code with AI built in, but not just as a side panel. It can read your whole codebase, navigate across files, and actually change code in ways that feel useful. It's what Copilot could've been if it understood your repo instead of just guessing line-by-line.&lt;/p&gt;

&lt;p&gt;Here are a few screenshots showing how Cursor responded when I asked it to build a photo gallery app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jxuhyvx0ld3hq5j620c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jxuhyvx0ld3hq5j620c.png" alt="cursor_1.png" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favxggrxjcjki83t2e90j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favxggrxjcjki83t2e90j.png" alt="cursor_2.png" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Core features of Cursor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Smart code completion&lt;/strong&gt;: AI-driven code generation and completion system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Natural language interaction&lt;/strong&gt;: Intelligent dialogue assistant that understands natural language and provides programming assistance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code refactoring and optimization&lt;/strong&gt;: Advanced features for code refactoring, understanding, and optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Cursor differs from traditional IDEs
&lt;/h3&gt;

&lt;p&gt;Cursor is a VS Code compiler integrated with multiple models, not a plugin used within an IDE. It provides more comprehensive contextual understanding, not only performing code completion but also specifically fixing error code and restructuring code architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and access
&lt;/h3&gt;

&lt;p&gt;Cursor offers flexible pricing plans, including free access with core features and premium tiers that unlock access to the latest Claude models and more advanced capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Cursor best for
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Developers seeking a smarter IDE experience&lt;/li&gt;
&lt;li&gt;Engineers focused on clean, maintainable code&lt;/li&gt;
&lt;li&gt;Builders who want AI help without giving up control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In our previous blog post, we shared a step-by-step tutorial on vibe coding with Cursor, showing how to build a simple app with authentication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.logto.io/cursor-logto-auth" rel="noopener noreferrer"&gt;https://blog.logto.io/cursor-logto-auth&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. GitHub Copilot Workspace - Issue → Plan → PR
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://github.com/features/copilot" rel="noopener noreferrer"&gt;github.com/features/copilot&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub Copilot is another AI agent inside your IDE. Its autocomplete feature was just the beginning — the real game-changer is &lt;strong&gt;Copilot Workspace.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The biggest advantage? Copilot is deeply integrated into the GitHub ecosystem. If your team relies heavily on GitHub for planning and maintaining code, Copilot is a solid starting point.&lt;/p&gt;

&lt;p&gt;The platform now features an advanced coding agent mode that can make sweeping changes across multiple files by analyzing code, proposing edits, running tests, and validating results.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqozcgi12tt9z0qugsxjr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqozcgi12tt9z0qugsxjr.png" alt="Github_copilot.png" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  When GitHub copilot starts to make sense
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You're juggling multiple features and don't want to context switch&lt;/li&gt;
&lt;li&gt;You want to delegate a "known shape" of work (CRUD, tests, tweaks)&lt;/li&gt;
&lt;li&gt;You've got a clear task but don't want to handhold it&lt;/li&gt;
&lt;li&gt;Teams already using GitHub ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GitHub Copilot key features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multi-model support including Claude 3.5 Sonnet and Google Gemini 2.0 Flash&lt;/li&gt;
&lt;li&gt;Agent mode for complex, multi-file operations&lt;/li&gt;
&lt;li&gt;Seamless integration with popular IDEs&lt;/li&gt;
&lt;li&gt;Real-time code suggestions and completions&lt;/li&gt;
&lt;li&gt;Pricing: Starting at $10/month for individual developers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Bolt - Multi-agent software building, from the browser
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://bolt.new/" rel="noopener noreferrer"&gt;bolt.new&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bolt feels like what would happen if you mashed together Figma, GPT, and a backend generator. You describe what you want: a form, a dashboard, a flow, and behind the scenes, multiple agents handle the pieces: UI, logic, backend, state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fafiopzhs1hzjky5tn1nt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fafiopzhs1hzjky5tn1nt.png" alt="bolt_1.png" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sgyjc4s1wdqhljk4oec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0sgyjc4s1wdqhljk4oec.png" alt="bolt_2.png" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes Bolt.new stand out
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fast iterations, even for non-developers&lt;/li&gt;
&lt;li&gt;Agents work in parallel to co-build components&lt;/li&gt;
&lt;li&gt;In-browser canvas makes it feel less like code, more like building&lt;/li&gt;
&lt;li&gt;No setup required, works directly in your browser&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What is Bolt.new best for
&lt;/h3&gt;

&lt;p&gt;Early MVPs, internal tools, or when you want to skip boilerplate and focus on core logic. Even if you’re not a developer, you can still build a polished, professional product. In contrast, Cursor offers more advanced configuration options suited for developers who want fine-grained control.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Lovable - Natural Language → Full-Stack App
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://lovable.so/" rel="noopener noreferrer"&gt;lovable.so&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lovable is simple: describe what you're building, and it gives you a working app: frontend, backend, database, login flow, the works. It's especially useful when you know what you want but don't want to scaffold everything from scratch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmm2quatzhc58w6ui6pgv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmm2quatzhc58w6ui6pgv.png" alt="lovable.png" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Lovable useful for
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Indie hackers&lt;/li&gt;
&lt;li&gt;Product people building internal tools&lt;/li&gt;
&lt;li&gt;MVPs and demos&lt;/li&gt;
&lt;li&gt;Getting a working base fast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lovable is not meant for tweaking every edge case  but it gets you a working foundation fast, which is often all you need. Lovable is similar to Bolt.new, but even simpler and more opinionated. It’s tightly integrated with its ecosystem and tools like Supabase. It’s not built for developers who need full control, but rather for indie hackers who want to quickly bring their ideas to life.&lt;/p&gt;

&lt;p&gt;In our previous blog post, we shared a step-by-step tutorial on vibe coding with Lovable, showing how to build a simple app with authentication.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.logto.io/lovable-logto-auth" rel="noopener noreferrer"&gt;https://blog.logto.io/lovable-logto-auth&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Anthropic's Claude Code - Command line power
&lt;/h2&gt;

&lt;p&gt;Anthropic's Claude Code represents a new approach to coding assistance. As an agentic command line tool, it allows developers to delegate entire coding tasks directly from their terminal, making it particularly powerful for complex development workflows.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbabhiz3r5puoc6ibr8j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbabhiz3r5puoc6ibr8j.png" alt="claude_1.png" width="800" height="575"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdk1hh4053l1z8r0da5io.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdk1hh4053l1z8r0da5io.png" alt="claude_2.png" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdf6v0dorkdn0j2p0ckk4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdf6v0dorkdn0j2p0ckk4.png" alt="claude_3.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code key features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Command-line interface for seamless workflow integration&lt;/li&gt;
&lt;li&gt;Claude Sonnet 4 powering advanced reasoning capabilities&lt;/li&gt;
&lt;li&gt;Autonomous task completion&lt;/li&gt;
&lt;li&gt;Integration with development pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What Claude is best for
&lt;/h3&gt;

&lt;p&gt;Advanced developers who prefer command-line workflows and need autonomous coding assistance&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Replit - Quick scripts, simple logic, in the browser
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://replit.com/" rel="noopener noreferrer"&gt;replit.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Replit’s biggest moat is that it didn’t start as an AI product — it began as a full-featured Cloud IDE that combines editor, terminal, and deployment into one environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open your browser and start coding, running services, using a terminal, or deploying apps&lt;/li&gt;
&lt;li&gt;Ideal for teaching, quick prototyping, and running small projects&lt;/li&gt;
&lt;li&gt;Supports real-time collaboration and live preview&lt;/li&gt;
&lt;li&gt;Extremely beginner-friendly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Replit got Compared to Bolt Lovable
&lt;/h3&gt;

&lt;p&gt;Replit builds from the ground up as a developer tool : AI is an enhancement, not the core.&lt;/p&gt;

&lt;p&gt;Bolt and Lovable start with “natural language to code” as the default. They assume you’re not a traditional developer and may not even want an IDE at all.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84odl9yp5ou8fvv3kk10.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84odl9yp5ou8fvv3kk10.png" alt="replit.png" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What Replit does best
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Short tasks, simple ideas&lt;/li&gt;
&lt;li&gt;Educational content, walkthroughs&lt;/li&gt;
&lt;li&gt;Live collaboration with AI in the loop&lt;/li&gt;
&lt;li&gt;Cloud-based development environment&lt;/li&gt;
&lt;li&gt;Instant deployment capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What is Replit best for
&lt;/h3&gt;

&lt;p&gt;Beginners, educators, and developers who prefer cloud-based development environments&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Windsurf - The collaborative alternative
&lt;/h2&gt;

&lt;p&gt;Windsurf, formerly known as Codeium, has evolved into a full-featured AI coding platform that now competes directly with Cursor and GitHub Copilot.&lt;/p&gt;

&lt;p&gt;What sets it apart is its focus on the &lt;strong&gt;chat-based, agentic experience&lt;/strong&gt;. While Cursor is still centered around the IDE, Windsurf leans more into conversational interactions, making AI feel more like a coding partner than just a tool.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6xfmlwc6kow6n29ul97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6xfmlwc6kow6n29ul97.png" alt="windsurf_1.png" width="800" height="464"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favymta801dzm4eiih4uo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Favymta801dzm4eiih4uo.png" alt="windsurf_2.png" width="800" height="466"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzt21e9qyuuhk147p7sw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzt21e9qyuuhk147p7sw1.png" alt="windsurf_3.png" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Windsurf key features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multi-model AI support&lt;/li&gt;
&lt;li&gt;Real-time collaboration features&lt;/li&gt;
&lt;li&gt;Extensive language support&lt;/li&gt;
&lt;li&gt;Custom model training capabilities&lt;/li&gt;
&lt;li&gt;A browser experience controlled by the Windsurf AI agent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Windsurf vs Cursor
&lt;/h3&gt;

&lt;p&gt;Whenever people talk about AI-powered IDEs, Windsurf and Cursor are always part of the conversation. So in this section, I’ll do a detailed comparison between the two.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Category&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Cursor&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Windsurf&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;User Experience &amp;amp; Interface Design&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cursor IDE focuses on speed and precision, with fast completions and a Composer mode that turns plain English into code. It’s a more established platform with refined workflows.&lt;/td&gt;
&lt;td&gt;Windsurf generally has a cleaner and more polished UI compared to Cursor. It feels like comparing an Apple product to a Microsoft one — those little details make Windsurf feel more refined and intuitive.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Core AI Technology&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cursor provides a flexible approach with multiple interaction modes, offering both direct assistance and task execution via Agent mode or the Composer feature.&lt;/td&gt;
&lt;td&gt;Windsurf's Cascade is an AI IDE agent that automatically fills context, runs commands, and remembers user-specific details across sessions. Powered by Codium, it feels like a reliable and intelligent coding partner.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Context Understanding &amp;amp; Code Intelligence&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cursor can lose context after several prompts and sometimes hallucinates. Its rigid structure may limit creative or unconventional coding workflows.&lt;/td&gt;
&lt;td&gt;Windsurf often gets things right on the first try, recognizing and using project-specific components accurately. It demonstrates stronger contextual understanding and code intelligence.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Workflow Philosophy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cursor follows an assistance-first approach. It handles ambiguous prompts well and offers developers more control, making it ideal for those who prefer hands-on involvement.&lt;/td&gt;
&lt;td&gt;Windsurf embraces an agent-first philosophy. It takes initiative in handling complex tasks, making it better suited for developers who prefer a more autonomous AI partner.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Which should you choose?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Choose Windsurf if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Value clean, refined UI/UX&lt;/li&gt;
&lt;li&gt;Want an AI that proactively understands your codebase&lt;/li&gt;
&lt;li&gt;Prefer an agent-style approach to coding&lt;/li&gt;
&lt;li&gt;Need better context retention across conversations&lt;/li&gt;
&lt;li&gt;Want more autonomous AI assistance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Choose Cursor if you:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Need faster code completions and immediate responses&lt;/li&gt;
&lt;li&gt;Prefer more control over AI interactions&lt;/li&gt;
&lt;li&gt;Work well with ambiguous prompts&lt;/li&gt;
&lt;li&gt;Want a more established platform with proven workflows&lt;/li&gt;
&lt;li&gt;Are comfortable with a steeper learning curve&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The real talk on AI coding tools
&lt;/h2&gt;

&lt;p&gt;Most "AI dev tools" are either too shallow (autocomplete with hype) or too heavy (agents with zero context). The ones that work fit into how you actually build:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choose based on your workflow:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; if you want a smarter IDE&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot Workspace&lt;/strong&gt; if you run your life through GitHub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bolt&lt;/strong&gt; if you want to orchestrate multiple agents to build features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lovable&lt;/strong&gt; if you want a full app without setting up a repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replit&lt;/strong&gt; if you're building in the browser&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to choose the right tool
&lt;/h2&gt;

&lt;p&gt;The best coding agent depends on your specific needs:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For individual developers:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cursor&lt;/strong&gt; for deep IDE integration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lovable&lt;/strong&gt; for rapid prototyping&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bolt&lt;/strong&gt; for browser-based development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code&lt;/strong&gt; for command-line workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For teams:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Copilot Workspace&lt;/strong&gt; for GitHub-centric workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windsurf&lt;/strong&gt; for collaborative features&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Best practices for using coding agents
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start with your workflow:&lt;/strong&gt; Pick tools that fit how you already work, not tools that force you to change everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't trust blindly:&lt;/strong&gt; These tools are powerful, but they're not perfect. Always review generated code for accuracy and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use them for leverage:&lt;/strong&gt; The best coding agents handle the boring stuff so you can focus on the interesting problems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay in control:&lt;/strong&gt; You're still the developer. These tools should amplify your abilities, not replace your judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The future of coding agents
&lt;/h2&gt;

&lt;p&gt;As we move through 2025, coding agents are becoming more sophisticated and integrated into development workflows. The trend is toward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Better context understanding&lt;/strong&gt; across entire projects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More autonomous task completion&lt;/strong&gt; with less handholding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialized agents&lt;/strong&gt; for specific domains and use cases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved collaboration&lt;/strong&gt; between human developers and AI agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These aren't toys. They're a new layer in the stack, not replacing developers, but changing the rhythm of how we ship software. The best coding agents in 2025 understand that developers don't need another chatbot. They need tools that actually help them build.&lt;/p&gt;

&lt;p&gt;The key is finding the ones that fit your workflow, solve real problems, and stay out of your way when you're in flow. Whether you're building MVPs, managing complex codebases, or just trying to ship faster, there's likely a coding agent that can help you get there.&lt;/p&gt;

&lt;p&gt;The future of software development is collaborative, with AI agents serving as intelligent partners that amplify human creativity and problem-solving capabilities. Choose the right tools, use them wisely, and focus on what you do best: solving problems and building software that matters.&lt;/p&gt;

&lt;p&gt;After exploring how Cursor, GitHub Copilot, and Windsurf shape the future of coding with AI, one thing is clear: the ecosystem is moving toward more conversational, agent-driven development.&lt;/p&gt;

&lt;p&gt;If you’re building modern apps and need authentication done right, &lt;a href="https://logto.io/" rel="noopener noreferrer"&gt;&lt;strong&gt;Logto&lt;/strong&gt;&lt;/a&gt; fits right into that workflow. It offers seamless auth, user management, and permission controls: all developer-friendly and easy to integrate with any of these AI-powered coding environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Less time on auth. More time shipping.&lt;/strong&gt;&lt;/p&gt;



</description>
      <category>agents</category>
      <category>coding</category>
    </item>
    <item>
      <title>CAPTCHA provider buyer’s guide 2025</title>
      <dc:creator>Xiao Yijun</dc:creator>
      <pubDate>Wed, 13 Aug 2025 03:16:29 +0000</pubDate>
      <link>https://dev.to/logto/captcha-provider-buyers-guide-2025-157e</link>
      <guid>https://dev.to/logto/captcha-provider-buyers-guide-2025-157e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article is created by &lt;a href="https://logto.io" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, an open-source solution that helps developers implement secure auth in minutes instead of months. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is CAPTCHA?
&lt;/h2&gt;

&lt;p&gt;CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) is a challenge-response system used to distinguish human users from automated program or bots.  It presents tasks that are easy for humans but hard for machines.  &lt;/p&gt;

&lt;p&gt;For example, a traditional CAPTCHA might show distorted letters or numbers and ask the user to type them.  By leveraging human pattern recognition, CAPTCHAs block most scripts and spam bots from abusing online forms and services.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does CAPTCHA work?
&lt;/h2&gt;

&lt;p&gt;Classic CAPTCHAs rely on tasks like interpreting distorted text or selecting specific images.  The distortion (e.g. warped letters overlaid with noise) foils simple OCR (Optical Character Recognition) algorithms.  &lt;/p&gt;

&lt;p&gt;Modern CAPTCHA solutions have evolved into several categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive CAPTCHA:&lt;/strong&gt; The user must actively solve a puzzle or perform a specific operation. Examples include “I’m not a robot” checkbox challenges. After clicking the checkbox, it may then prompt the user to select all images with a traffic light or storefront, typing shown characters, or even audio tests. Notably, with Cloudflare Turnstile, a simple checkbox click is enough to verify whether this action is human, without any complicated challenges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-interactive CAPTCHA:&lt;/strong&gt; These do not interrupt the user with a puzzle or operation. FFor example, with Cloudflare Turnstile’s &lt;a href="https://developers.cloudflare.com/turnstile/concepts/widget/#non-interactive" rel="noopener noreferrer"&gt;non-interactive mode&lt;/a&gt;, visitors simply see a small widget with an automatic loading bar. It runs a background check and then quietly returns a success or failure result. This approach prioritizes user experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invisible or passive CAPTCHA:&lt;/strong&gt; These work entirely in the background, without any visible test. For example, Google reCAPTCHA v3 invisibly analyzes user behavior (mouse movements, timing, cookies, etc.) to &lt;a href="https://developers.google.com/recaptcha/docs/v3" rel="noopener noreferrer"&gt;assign a risk score&lt;/a&gt; (0–1) without a direct challenge. Users rarely see anything unless the score is too low.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Should we add CAPTCHA protection into the product?
&lt;/h2&gt;

&lt;p&gt;Using CAPTCHA is a trade-off between security and user experience. When selecting a CAPTCHA service, key considerations include:&lt;/p&gt;

&lt;h3&gt;
  
  
  Can AI bypass CAPTCHA challenge?
&lt;/h3&gt;

&lt;p&gt;CAPTCHAs are effective against basic bots, but determined attackers have countermeasures. Advanced scripts or AI-driven bots can sometimes bypass CAPTCHAs using OCR/image recognition and machine learning. There are even anti-CAPTCHA or solver services (often called &lt;em&gt;bypass-as-a-service&lt;/em&gt;) where attackers pay humans or specialized AI to solve CAPTCHAs at scale. For example, Google once reported that older text CAPTCHAs could be solved by bots over 99% of the time. &lt;/p&gt;

&lt;p&gt;However, modern &lt;strong&gt;non-interactive&lt;/strong&gt; and &lt;strong&gt;invisible&lt;/strong&gt; CAPTCHAs, like behavior-based or cryptographic background checks, offer better defense to AI attack. Notably, bot traffic is now enormous: On the order of 51% of all internet traffic, with 37% being malicious. So having &lt;em&gt;some&lt;/em&gt; CAPTCHA or bot-detection is important even if it is not foolproof.&lt;/p&gt;

&lt;p&gt;Besides, adding multi-layered bot protection is necessary, such as device fingerprinting (e.g., via &lt;a href="https://auth.wiki/passkey" rel="noopener noreferrer"&gt;passkeys&lt;/a&gt;), rate limiting, &lt;a href="https://auth.wiki/mfa" rel="noopener noreferrer"&gt;Multi-Factor Authentication&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does adding CAPTCHA hurt the user experience?
&lt;/h3&gt;

&lt;p&gt;Any CAPTCHA adds friction for users. Studies show only about 66% of humans enter a CAPTCHA correctly on the first try, meaning many may get frustrated or abandon a form. For example, lengthy image puzzles or multiple re-attempts can lower conversion rates. &lt;/p&gt;

&lt;p&gt;To mitigate this, modern CAPTCHA providers focus on minimizing human effort. Strategies include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only adaptive-challenging users flagged as high-risk.&lt;/li&gt;
&lt;li&gt;Using non-obtrusive signals (mouse movements, timing, and more) instead of puzzles.&lt;/li&gt;
&lt;li&gt;Offering invisible CAPTCHAs that run quietly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cloudflare reports that Turnstile “eliminate the frustrating experience of CAPTCHAs” so real users “no longer have to waste time and effort solving visual puzzles”. In practice, many sites only show a checkbox or image &lt;strong&gt;challenge when a user’s behavior looks suspicious; normal users may see nothing at all.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Does CAPTCHA block AI agent access third-party services?
&lt;/h3&gt;

&lt;p&gt;Today, more and more AI agents are emerging, designed to automate tasks and interact with third-party services. &lt;/p&gt;

&lt;p&gt;Many domain-specific AI agents connect safely and legitimately to third-party apps using standard protocols like &lt;a href="https://auth.wiki/oauth-2.0" rel="noopener noreferrer"&gt;&lt;strong&gt;OAuth&lt;/strong&gt;&lt;/a&gt; and &lt;a href="https://mcp-auth.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;MCP&lt;/strong&gt;&lt;/a&gt; (Model Context Protocols). This is a secure, approved way to grant an agent access which make users to authorize smoothly.&lt;/p&gt;

&lt;p&gt;However, some ambitious “general-purpose” AI agents aim to fully replace human browsing actions. For example, Manus is designed to automate everything a person might do in a web browser, from filling in forms to signing in with a username and password. In real-world tests, &lt;strong&gt;Manus&lt;/strong&gt; &lt;strong&gt;struggle to get past modern high-security CAPTCHAs&lt;/strong&gt; such as Cloudflare Turnstile and Google reCAPTCHA Enterprise, even if the user tries to “hand off” the session to a real person to solve the challenge manually. If you’re building an AI agent, it’s important to design your authentication flows carefully. Relying on browser automation to log in like a human is increasingly impractical because strong CAPTCHAs are extremely good at blocking bot-like interactions.&lt;/p&gt;

&lt;h3&gt;
  
  
  How much does adding CAPTCHA increase budgets?
&lt;/h3&gt;

&lt;p&gt;CAPTCHA services range from free to paid. Free plans often limit usage or have basic features. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloudflare Turnstile is free with unlimited usage.&lt;/li&gt;
&lt;li&gt;Google’s &lt;em&gt;reCAPTCHA Essentials&lt;/em&gt; tier is free for up to 10,000 assessments per month; higher-volume or advanced features require upgrading to Standard or Enterprise.&lt;/li&gt;
&lt;li&gt;hCaptcha offer a free “Basic” tier and charge for Pro/Enterprise (e.g. hCaptcha’s Pro plan starts around $99–$139 per month for 100K requests).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Be sure to check each provider’s plan limits and pricing for your expected traffic and conversion goals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage scenarios of CAPTCHA
&lt;/h2&gt;

&lt;p&gt;CAPTCHAs are typically deployed wherever bots can cause trouble.  Common scenarios include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authentication flows:&lt;/strong&gt; Protecting registration, sign-in, and password recovery flows from bot abuse. CAPTCHA serves as the first line of defense against scripted account attacks. Beyond that, features like &lt;a href="https://docs.logto.io/security/identifier-lockout" rel="noopener noreferrer"&gt;sign-in lockout&lt;/a&gt; (to stop brute-force password attempts) and adaptive MFA (to add extra layers of verification when risk is detected) can further strengthen security while keeping the experience smooth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form submissions:&lt;/strong&gt; Guarding public forms (e.g., contact us, feedback, comments, reviews). Without CAPTCHA, spammers can flood comment sections or message boards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High-value actions:&lt;/strong&gt; Preventing fraud in online polls, ticket sales, promotions, or e-commerce checkouts. CAPTCHAs can limit bulk automated voting or scalping (e.g. one vote per person in a poll, one ticket per person).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By inserting CAPTCHAs at these touchpoints, you significantly reduce automated abuse while keeping the system open to legitimate users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compare CAPTCHA providers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CAPTCHA provider&lt;/th&gt;
&lt;th&gt;User experience&lt;/th&gt;
&lt;th&gt;Plan &amp;amp; pricing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/recaptcha" rel="noopener noreferrer"&gt;reCAPTCHA v2 (Google)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Users must click a ”I'm not a robot“ checkbox. This click might or might not challenge them with CAPTCHA image puzzles.&lt;/td&gt;
&lt;td&gt;Free (Essentials) for up to 10K assessments/mo; then paid tiers (Standard/Enterprise).  Enterprise costs $8 up to 100K and $1 per additional 1K.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://developers.google.com/recaptcha" rel="noopener noreferrer"&gt;reCAPTCHA v3 (Google)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Invisible, background risk scoring (no user challenge).&lt;/td&gt;
&lt;td&gt;Same pricing tiers as reCAPTCHA v2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://cloud.google.com/recaptcha/docs/overview" rel="noopener noreferrer"&gt;reCAPTCHA Enterprise (Google)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Two interactive modes: 1. &lt;strong&gt;Score-based&lt;/strong&gt; (no challenge). 2. &lt;strong&gt;Checkbox&lt;/strong&gt; and adaptive visual challenge.&lt;/td&gt;
&lt;td&gt;Volume-based pricing: free up to 10K; $8 up to 100K; $1/1K beyond.  Offers extra features like account defender and SMS fraud protection.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cloudflare.com/application-services/products/turnstile/" rel="noopener noreferrer"&gt;Cloudflare Turnstile&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Three interactive modes: 1.&lt;strong&gt;Managed&lt;/strong&gt;: Cloudflare logic determines which users see checkbox widget. 2. &lt;strong&gt;Non-interactive&lt;/strong&gt;: All user see auto-loading widget, but never interact with the widget. 3. &lt;strong&gt;Invisible&lt;/strong&gt;: Visitors will never see or interact with the widget. Invisible challenges should take a few second.&lt;/td&gt;
&lt;td&gt;Almost completely free. Free plan: Up to 20 CAPTCHA widgets, 15 hostnames per widget, unlimited volume. Enterprise plan: Unlimited widgets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.hcaptcha.com/" rel="noopener noreferrer"&gt;hCaptcha&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Interactive image classification tasks (similar to reCAPTCHA v2). Focuses on privacy, but puzzles can be complex.&lt;/td&gt;
&lt;td&gt;Free up to 100k requests per month. Pro plan ~$99/mo. Enterprise custom plans.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.arkoselabs.com/" rel="noopener noreferrer"&gt;FunCaptcha (Arkose Labs)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Gamified micro-games (rotate/slide objects, simple quizzes).  More engaging puzzles intended to defeat bots.&lt;/td&gt;
&lt;td&gt;No free tier. Only provide Enterprise solution (part of Arkose Bot Management) and contact for pricing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://friendlycaptcha.com/" rel="noopener noreferrer"&gt;Friendly Captcha&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fully invisible proof-of-work puzzle. No user action needed with all solved in the background.&lt;/td&gt;
&lt;td&gt;Free non-commercial tier (1 domain, 1000 requests).  Paid plans: Starter €9/mo (1K req); Growth €39/mo (5K req); Advanced €200/mo (50K req); Enterprise custom.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://captcha.com/" rel="noopener noreferrer"&gt;BotDetect (Captcha.com)&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Traditional image or audio CAPTCHA with letters/numbers.&lt;/td&gt;
&lt;td&gt;Self-hosted and License-based.  No free plan.  APT license fee about $99/year.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Among these, &lt;strong&gt;Cloudflare Turnstile&lt;/strong&gt; stands out today. It’s free, easy to integrate, and unobtrusive. Turnstile delivers robust bot blocking without forcing puzzles on legitimate users, and it “never harvests data for ad retargeting”, fully respecting user privacy. For most sites, Turnstile offers the best balance of security, UX, and cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simplify CAPTCHA integration in your sign-in flows
&lt;/h2&gt;

&lt;p&gt;The easiest way to add CAPTCHA is to use an integrated identity platform.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://logto.io/" rel="noopener noreferrer"&gt;Logto&lt;/a&gt;, a developer-friendly IAM solution, supports top providers like Google &lt;a href="https://docs.logto.io/security/captcha/recaptcha-enterprise" rel="noopener noreferrer"&gt;reCAPTCHA Enterprise&lt;/a&gt; and &lt;a href="https://docs.logto.io/security/captcha/turnstile" rel="noopener noreferrer"&gt;Cloudflare Turnstile&lt;/a&gt;, so you can enable CAPTCHA in just a few clicks.&lt;/p&gt;

&lt;p&gt;With Logto, your team can secure your &lt;a href="https://docs.logto.io/end-user-flows" rel="noopener noreferrer"&gt;entire authentication flows&lt;/a&gt; without dealing with complex implementation work, including sign-up, sign-in, account recovery, SSO, MFA, multi-tenant management, etc. Learn more about &lt;a href="https://docs.logto.io/security/captcha" rel="noopener noreferrer"&gt;Logto’s CAPTCHA&lt;/a&gt; or &lt;a href="https://logto.io/contact" rel="noopener noreferrer"&gt;reach out to the team&lt;/a&gt; if you’d like explore more CAPTCHA provider options.&lt;/p&gt;



</description>
      <category>captcha</category>
      <category>security</category>
    </item>
  </channel>
</rss>
