SIWE + IndieAuth Bridge: Implementation Roadmap
Overview
Build a bridge that allows Sign-In With Ethereum (SIWE) to work as an authentication provider within the IndieAuth ecosystem, enabling Web3 users to authenticate with IndieWeb services using their Ethereum wallets and ENS names.
Goals
- Make SIWE an optional authentication method alongside existing IndieAuth providers (GitHub, email, etc.)
- Support ENS names as valid identifiers within rel-me verification
- Maintain compatibility with existing IndieAuth specifications
- Keep the barrier to entry low (non-crypto users aren't affected)
Architecture Components
1. SIWE IndieAuth Provider Service
A standalone service that acts as an IndieAuth authorization endpoint supporting SIWE.
Responsibilities:
- Accept IndieAuth authorization requests
- Present SIWE challenge to users
- Verify Ethereum signatures
- Issue authorization codes
- Provide token endpoint for access tokens
2. ENS Profile Resolution
Handle ENS names as profile identifiers.
Responsibilities:
- Resolve ENS names to Ethereum addresses
- Fetch ENS text records (avatar, description, url, etc.)
- Verify ownership via signature
- Map ENS profiles to rel-me links
3. rel-me Verification Extension
Extend rel-me verification to support Ethereum addresses and ENS names.
Responsibilities:
- Recognize Ethereum addresses and ENS names in rel="me" links
- Verify bidirectional links between websites and ENS profiles
- Support format:
ethereum:0x... or https://app.ens.domains/name/yourname.eth
Implementation Phases
Phase 1: Research & Specification (2-3 weeks)
Phase 2: Core SIWE Provider (4-6 weeks)
Phase 3: ENS Integration (3-4 weeks)
Phase 4: rel-me Verification (3-4 weeks)
Phase 5: User Experience (2-3 weeks)
Phase 6: Integration & Testing (3-4 weeks)
Phase 7: Community & Adoption (Ongoing)
Technical Stack Recommendations
Backend Service
- Language: Node.js (TypeScript) or Python
- Framework: Express.js, Fastify, or Flask
- SIWE:
siwe npm package or siwe Python package
- Ethereum:
ethers.js v6 or viem (Node.js), web3.py (Python)
- Storage: Redis for sessions, PostgreSQL for persistence
Frontend
- Framework: React or Vue.js (for auth UI)
- Wallet: WalletConnect v2, wagmi, or ConnectKit
- Styling: Tailwind CSS for clean, responsive design
Infrastructure
- Hosting: Vercel, Railway, or DigitalOcean
- RPC Provider: Alchemy, Infura, or public endpoints
- Domain: Own domain for the service (e.g.,
siwe.indieauth.com)
Key Technical Challenges
-
Mapping ENS to "me" URLs: IndieAuth expects a canonical URL. ENS names need to be represented consistently.
- Option A: Use ENS app URLs (
https://app.ens.domains/name/yourname.eth)
- Option B: Use a custom scheme (
ens://yourname.eth)
- Option C: Use the ENS-linked website as canonical identity
-
Bidirectional verification: ENS text records vs traditional rel-me links
- Propose standard: website has
<link rel="me" href="ethereum:0x..." /> or ENS link
- ENS has text record
url pointing to website
-
Session management: SIWE signatures expire, need refresh mechanism
- Implement refresh tokens
- Re-prompt for signature when needed
-
Multi-chain support: Should it support L2s and other EVM chains?
- Start with Ethereum mainnet
- Add L2s based on demand
Success Metrics
Open Questions for Community Feedback
- Should ENS names be primary identifiers, or should the linked website be canonical?
- How to handle users with multiple ENS names?
- Should we support .eth subdomains differently?
- What about other Web3 identity systems (Lens, Farcaster)?
- How to handle chain transitions or ENS transfers?
- Should this be a hosted service or a library for self-hosting?
Resources & References
Contributing
This is a community-driven effort. Contributions welcome in:
- Protocol design and specification
- Implementation (backend, frontend, libraries)
- Documentation and tutorials
- Testing and security review
- Community outreach and adoption
Estimated Total Timeline: 4-6 months for MVP
Recommended Team Size: 2-3 developers + community feedback
SIWE + IndieAuth Bridge: Implementation Roadmap
Overview
Build a bridge that allows Sign-In With Ethereum (SIWE) to work as an authentication provider within the IndieAuth ecosystem, enabling Web3 users to authenticate with IndieWeb services using their Ethereum wallets and ENS names.
Goals
Architecture Components
1. SIWE IndieAuth Provider Service
A standalone service that acts as an IndieAuth authorization endpoint supporting SIWE.
Responsibilities:
2. ENS Profile Resolution
Handle ENS names as profile identifiers.
Responsibilities:
3. rel-me Verification Extension
Extend rel-me verification to support Ethereum addresses and ENS names.
Responsibilities:
ethereum:0x...orhttps://app.ens.domains/name/yourname.ethImplementation Phases
Phase 1: Research & Specification (2-3 weeks)
Phase 2: Core SIWE Provider (4-6 weeks)
siwelibrary for message handling/auth)client_id,redirect_uri,state,code_challenge/token)Phase 3: ENS Integration (3-4 weeks)
/profile/yourname.eth)Phase 4: rel-me Verification (3-4 weeks)
ethereum:0x...or ENS links with rel="me"urltext record to websitePhase 5: User Experience (2-3 weeks)
Phase 6: Integration & Testing (3-4 weeks)
Phase 7: Community & Adoption (Ongoing)
Technical Stack Recommendations
Backend Service
siwenpm package orsiwePython packageethers.jsv6 orviem(Node.js),web3.py(Python)Frontend
Infrastructure
siwe.indieauth.com)Key Technical Challenges
Mapping ENS to "me" URLs: IndieAuth expects a canonical URL. ENS names need to be represented consistently.
https://app.ens.domains/name/yourname.eth)ens://yourname.eth)Bidirectional verification: ENS text records vs traditional rel-me links
<link rel="me" href="ethereum:0x..." />or ENS linkurlpointing to websiteSession management: SIWE signatures expire, need refresh mechanism
Multi-chain support: Should it support L2s and other EVM chains?
Success Metrics
Open Questions for Community Feedback
Resources & References
Contributing
This is a community-driven effort. Contributions welcome in:
Estimated Total Timeline: 4-6 months for MVP
Recommended Team Size: 2-3 developers + community feedback