Handle Web Authentication for Go apps that wish to implement a passwordless solution for users

WebAuthn Library

GoDoc Go Report Card

This library is meant to handle Web Authentication for Go apps that wish to implement a passwordless solution for users. While the specification is currently in Candidate Recommendation, this library conforms as much as possible to the guidelines and implementation procedures outlined by the document.

Fork

This library is a hard fork of github.com/duo-labs/webauthn however we do not have any affiliation with Duo Labs or any of the authors. This library should not be seen as a representation of them in any form. The intent of this library is to address outstanding issues with that library without having to wait on the maintainers to merge the PR's.

It is distributed under the same 3-Clause BSD license as the original fork, with the only amendment being the additional 3-Clause BSD license attributing license rights to this repository.

Status

This library is still version 0, as per semver rules there may be breaking changes without warning. While we strive to avoid such changes they may be unavoidable.

Quickstart

go get github.com/go-webauthn/webauthn and initialize it in your application with basic configuration values.

Make sure your user model is able to handle the interface functions laid out in webauthn/user.go. This means also supporting the storage and retrieval of the credential and authenticator structs in webauthn/credential.go and webauthn/authenticator.go, respectively.

Initialize the request handler

import (
	"github.com/go-webauthn/webauthn/webauthn"
)

var (
    web *webauthn.WebAuthn
    err error
)

// Your initialization function
func main() {
    web, err = webauthn.New(&webauthn.Config{
        RPDisplayName: "Go Webauthn", // Display Name for your site
        RPID: "go-webauthn.local", // Generally the FQDN for your site
        RPOrigin: "https://login.go-webauthn.local", // The origin URL for WebAuthn requests
        RPIcon: "https://go-webauthn.local/logo.png", // Optional icon URL for your site
    })
    if err != nil {
        fmt.Println(err)
    }
}

Registering an account

func BeginRegistration(w http.ResponseWriter, r *http.Request) {
    user := datastore.GetUser() // Find or create the new user  
    options, sessionData, err := web.BeginRegistration(&user)
    // handle errors if present
    // store the sessionData values 
    JSONResponse(w, options, http.StatusOK) // return the options generated
    // options.publicKey contain our registration options
}

func FinishRegistration(w http.ResponseWriter, r *http.Request) {
    user := datastore.GetUser() // Get the user  
    // Get the session data stored from the function above
    // using gorilla/sessions it could look like this
    sessionData := store.Get(r, "registration-session")
    parsedResponse, err := protocol.ParseCredentialCreationResponseBody(r.Body)
    credential, err := web.CreateCredential(&user, sessionData, parsedResponse)
    // Handle validation or input errors
    // If creation was successful, store the credential object
    JSONResponse(w, "Registration Success", http.StatusOK) // Handle next steps
}

Logging into an account

func BeginLogin(w http.ResponseWriter, r *http.Request) {
    user := datastore.GetUser() // Find the user
    options, sessionData, err := webauthn.BeginLogin(&user)
    // handle errors if present
    // store the sessionData values
    JSONResponse(w, options, http.StatusOK) // return the options generated
    // options.publicKey contain our registration options
}

func FinishLogin(w http.ResponseWriter, r *http.Request) {
    user := datastore.GetUser() // Get the user 
    // Get the session data stored from the function above
    // using gorilla/sessions it could look like this
    sessionData := store.Get(r, "login-session")
    parsedResponse, err := protocol.ParseCredentialRequestResponseBody(r.Body)
    credential, err := webauthn.ValidateLogin(&user, sessionData, parsedResponse)
    // Handle validation or input errors
    // If login was successful, handle next steps
    JSONResponse(w, "Login Success", http.StatusOK)
}

Modifying Credential Options

You can modify the default credential creation options for registration and login by providing optional structs to the BeginRegistration and BeginLogin functions.

Registration modifiers

You can modify the registration options in the following ways:

// Wherever you handle your WebAuthn requests
import (
	"github.com/go-webauthn/webauthn/protocol"
	"github.com/go-webauthn/webauthn/webauthn"
)

var webAuthnHandler webauthn.WebAuthn // init this in your init function

func beginRegistration() {
    // Updating the AuthenticatorSelection options. 
    // See the struct declarations for values
    authSelect := protocol.AuthenticatorSelection{        
		AuthenticatorAttachment: protocol.AuthenticatorAttachment("platform"),
		RequireResidentKey: protocol.ResidentKeyUnrequired(),
        UserVerification: protocol.VerificationRequired
    }

    // Updating the ConveyencePreference options. 
    // See the struct declarations for values
    conveyencePref := protocol.ConveyancePreference(protocol.PreferNoAttestation)

    user := datastore.GetUser() // Get the user  
    opts, sessionData, err webAuthnHandler.BeginRegistration(&user, webauthn.WithAuthenticatorSelection(authSelect), webauthn.WithConveyancePreference(conveyancePref))

    // Handle next steps
}

Login modifiers

You can modify the login options to allow only certain credentials:

// Wherever you handle your WebAuthn requests
import (
	"github.com/go-webauthn/webauthn/protocol"
	"github.com/go-webauthn/webauthn/webauthn"
)

var webAuthnHandler webauthn.WebAuthn // init this in your init function

func beginLogin() {
    // Updating the AuthenticatorSelection options. 
    // See the struct declarations for values
    allowList := make([]protocol.CredentialDescriptor, 1)
    allowList[0] = protocol.CredentialDescriptor{
        CredentialID: credentialToAllowID,
        Type: protocol.CredentialType("public-key"),
    }

    user := datastore.GetUser() // Get the user  

    opts, sessionData, err := webAuthnHandler.BeginLogin(&user, webauthn.wat.WithAllowedCredentials(allowList))

    // Handle next steps
}

Acknowledgements

We graciously acknowledge the original authors of this library github.com/duo-labs/webauthn for their amazing implementation. Without their amazing work this library could not exist.

Comments
  • fix(challenge): urlsafe base64 encoding

    fix(challenge): urlsafe base64 encoding

    This fixes issue with wrong encoding being used for the challenge. According to the specs^1 the challenge should be base64 url-safe encoded. Until now, the package used std encoding which uses slightly different set of characters. This was reported in the linked issue and we also encountered the same issue when testing our implementation of webauthn e2e using github.com/descope/virtualwebauthn.

    The commit removes the custom type for challenge and instead passes around the challenge url-safe base64 encoded right from the point of creation. Because the string is fully valid it can be safely used in json as well as stored in redis or other possible storage implementations that might be used by the clients of the library.

    I tried to keep the tests as close to the original as possible. In some cases that required transforming the challenge back to bytes considering the previously used padding to be part of the bytes and then re-encoding into url-safe base64 string.

    Fix: https://github.com/duo-labs/webauthn/issues/128

  • Transportation hybrid

    Transportation hybrid

    Description

    FIDO announced to add hybrid as transport method see here and Safari under macOS already sends hybrid.

    Use Case

    Safari running on macOS sends already transportation hybrid.

    Documentation

    https://github.com/w3c/webauthn/blob/main/index.bs#L3818

  • List issues and PRs from upstream that got resolved here

    List issues and PRs from upstream that got resolved here

    It would be nice to have such a list to see what has been fixed and what not. A simple list with cross-reference would be enough I guess. :)

    Just noticed that there is even a second fork you work on as well: https://github.com/authelia/webauthn Could you explain which one is the most up-to-date? Seems like you actively contribute to all of them @james-d-elliott :D

  • build(deps): update module golang.org/x/crypto to v0.4.0

    build(deps): update module golang.org/x/crypto to v0.4.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | minor | v0.3.0 -> v0.4.0 |


    Release Notes

    golang/crypto

    v0.4.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Allow multiple RPOrigins

    Allow multiple RPOrigins

    Description

    Allow multiple RPOrigins as suggested in https://github.com/duo-labs/webauthn/issues/143.

    Currently only one RPOrigin can be defined, which is sufficient for most use cases. But if you have a webpage and a mobile app (Android or/and iOS) and they should share the (passkeys) credentials you can't do this right now.

    Use Case

    Share (passkeys) credentials between a mobile app and a webpage.

    Documentation

    No response

  • build(deps): update golang.org/x/crypto digest to d6f0a8c

    build(deps): update golang.org/x/crypto digest to d6f0a8c

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | digest | 4161e89 -> d6f0a8c |


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by Mend Renovate. View repository job log here.

  • build(deps): update module golang.org/x/crypto to v0.5.0

    build(deps): update module golang.org/x/crypto to v0.5.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | minor | v0.4.0 -> v0.5.0 |


    Release Notes

    golang/crypto

    v0.5.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • build(deps): update module github.com/golang-jwt/jwt/v4 to v4.4.3

    build(deps): update module github.com/golang-jwt/jwt/v4 to v4.4.3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/golang-jwt/jwt/v4 | require | patch | v4.4.2 -> v4.4.3 |


    Release Notes

    golang-jwt/jwt

    v4.4.3: 4.4.3

    Compare Source

    What's Changed

    New Contributors

    Full Changelog: https://github.com/golang-jwt/jwt/compare/v4.4.2...v4.4.3


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • test(protocol): add coverage to 256bit ecdsa curve

    test(protocol): add coverage to 256bit ecdsa curve

    [this repost of https://github.com/duo-labs/webauthn/pull/158, after seeing https://github.com/duo-labs/webauthn/issues/155]

    For a few hours I was convinced that this library (webauthncose package specifically) wasn't doing its job properly because my code was accepting bad signatures as valid. So I set out to write a test to capture this. Turns out: this library is doing its job, and my code was at fault!

    Shameful details
    func checkWebauthnSignature(...) error {
        valid, err := webauthncose.VerifySignature(key, message, sigBytes)
        if !valid || err != nil {
            return errors.Wrap(err, "error verifying signature")
        }
    }
    

    The bug in the above snippet: errors.Wrap(nil, "something") is nil. Which means when valid is false, nil is returned 🤦

    Instead of discarding this test I thought it'd be a good addition to the test suite.

  • build(deps): update module golang.org/x/crypto to v0.3.0

    build(deps): update module golang.org/x/crypto to v0.3.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | minor | v0.2.0 -> v0.3.0 |


    Release Notes

    golang/crypto

    v0.3.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • build(deps): update module golang.org/x/crypto to v0.2.0

    build(deps): update module golang.org/x/crypto to v0.2.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang.org/x/crypto | require | minor | v0.1.0 -> v0.2.0 |


    Release Notes

    golang/crypto

    v0.2.0

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • Add AttestationConveyancePreference enterprise support

    Add AttestationConveyancePreference enterprise support

    Description

    It would be nice if this library added support for enterprise attestation

    Use Case

    For enterprise deployments (where all hardware and configurations and centrally maintained) it would be nice to be able to request enterprise attestation.

    Documentation

    https://www.w3.org/TR/webauthn-2/#enum-attestation-convey

    https://www.w3.org/TR/webauthn-2/#dom-attestationconveyancepreference-enterprise

    https://groups.google.com/a/fidoalliance.org/g/fido-dev/c/TdCoQUsgFZU?pli=1

  • Invalid link to maintainers group on security page.

    Invalid link to maintainers group on security page.

    Version

    0.3.1

    Description

    All links into maintainers group on security page does not work (outside of go-webauthn org I suppose).

    Reproduction

    Check https://github.com/orgs/go-webauthn/teams/maintainers inside incognito mode in browser.

    Expectations

    No response

    Documentation

    No response

  • Project Takeover Tasks

    Project Takeover Tasks

    Description

    The following information is to be used for the purposes of keeping track of issues closed in the migration to this repository from the previous. I will be sifting through them as I get time and creating relevant issues as necessary and/or contact users who made PR's. Anyone is welcome to do the same or reply if they know the status of an issue (some were already fixed).

    Use Case

    Ensuring the future of the project migration is seamless.

    Documentation

    PR's

    • [x] https://github.com/duo-labs/webauthn/pull/148
    • [x] https://github.com/duo-labs/webauthn/pull/150
    • [ ] https://github.com/duo-labs/webauthn/pull/151
    • [ ] https://github.com/duo-labs/webauthn/pull/156
    • [ ] https://github.com/duo-labs/webauthn/pull/130

    Issues

    • [x] https://github.com/duo-labs/webauthn/issues/76
    • [x] https://github.com/duo-labs/webauthn/issues/72
    • [x] https://github.com/duo-labs/webauthn/issues/74
    • [x] https://github.com/duo-labs/webauthn/issues/85
    • [x] https://github.com/duo-labs/webauthn/issues/87
    • [ ] https://github.com/duo-labs/webauthn/issues/79
    • [x] https://github.com/duo-labs/webauthn/issues/77
    • [x] https://github.com/duo-labs/webauthn/issues/89
    • [x] https://github.com/duo-labs/webauthn/issues/92
    • [x] https://github.com/duo-labs/webauthn/issues/91
    • [x] https://github.com/duo-labs/webauthn/issues/96
    • [x] https://github.com/duo-labs/webauthn/issues/100
    • [x] https://github.com/duo-labs/webauthn/issues/94
    • [ ] https://github.com/duo-labs/webauthn/issues/134
    • [x] https://github.com/duo-labs/webauthn/issues/136
    • [x] https://github.com/duo-labs/webauthn/issues/102
    • [ ] https://github.com/duo-labs/webauthn/issues/128
    • [ ] https://github.com/duo-labs/webauthn/issues/152
    • [ ] https://github.com/duo-labs/webauthn/issues/138
    • [x] https://github.com/duo-labs/webauthn/issues/143
    • [ ] https://github.com/duo-labs/webauthn/issues/144
    • [x] https://github.com/duo-labs/webauthn/issues/147
    • [x] https://github.com/duo-labs/webauthn/issues/154
    • [x] https://github.com/duo-labs/webauthn/issues/69
    • [x] https://github.com/duo-labs/webauthn/issues/62
  • Attestation verification through trust anchor

    Attestation verification through trust anchor

    Description

    Hello all.

    After studying a bit the library and stumbling in this piece of comment, I would like to open a discussion on how could be an interesting way of supporting a trust verification using the library. My understanding is that up to this point, the library does not export any facility for doing trust assessments on the embedded attestation certificates. I couldn't also find a convenient way through a public method to extract the embedded certificates without having to copy the whole procedure of attestation-object protocol decoding. I'm opening this feature-request to trigger a discussion around how that could be accomplished. Here are some options that come to my mind, any others would be welcomed:

    1. Implement in the library the possibility to provide a list of trusted root certificates against which the attestation certificate could be verified.
    2. Implement in the library something like ExportAttestationCertificates method that would delegate to the client the responsibility to implement the chain-of-trust verification.
    3. Document if there is an existing mechanism to achieve that.

    What are your thoughts on that? I would be happy to try to help wherever possible with some code-contributions. 😃

    Thank you in advance for your work and support, Rodrigo

    Use Case

    Some types of webauthn attestation verification would require verification against an RP policy. This verification is done by verifying the embedded attestation certificate against an RP-trusted set of root certificates (otherwise called a trust store). Use cases:

    • Allow RP to filter which kinds/types of authenticators to allow. Some RPs might only want to support apple devices. Others only Yubico, and so on and so forth.
    • Check the validity and trustworthiness of the provided attestation-certificate

    Documentation

    No response

  • Implement live comprehensive example

    Implement live comprehensive example

    Description

    It would be good as some users have mentioned to produce a live example that's published showcasing not only what this library is capable of but also what webauthn is capable of. This would help users implement the library, and show what options are available.

    The following things can be showcased:

    • [ ] Simple email/username and password registration/login for demonstration purposes
    • [ ] Webauthn Registration
      • [ ] Standard Registration (non-discoverable)
      • [ ] Discoverable Registration
      • [ ] Identityless/Userless Registration i.e. via a discoverable credential which links to an account UUID/GUID
      • [ ] Support for all of the standard registration options:
        • [ ] Attachment
        • [ ] Discoverable / Resident Key / Require Resident Key
        • [ ] User Verification
        • [ ] Conveyancing Preference
    • [ ] Webauthn Authentication
      • [ ] "True" passwordless logins (no username required) which also supports usernameless login
      • [ ] 2FA demonstration

    Implementation Specifics (all ideas at this point):

    • [ ] React (via go embed)
      • [ ] MaterialUI
      • [ ] TypeScript
    • [ ] Database
      • [ ] Postgres?
    • [ ] Hosting:
      • [ ] I can probably self host it in the cloud but it'd be good to find some form of sponsor for this which allows a distributed model maybe

    Use Case

    No response

    Documentation

    #47

  • Configure WhiteSource Bolt for GitHub

    Configure WhiteSource Bolt for GitHub

    Welcome to WhiteSource Bolt for GitHub! This is an onboarding PR to help you understand and configure settings before WhiteSource starts scanning your repository for security vulnerabilities.

    :vertical_traffic_light: WhiteSource Bolt for GitHub will start scanning your repository only once you merge this Pull Request. To disable WhiteSource Bolt for GitHub, simply close this Pull Request.


    What to Expect

    This PR contains a '.whitesource' configuration file which can be customized to your needs. If no changes were applied to this file, WhiteSource Bolt for GitHub will use the default configuration.

    Before merging this PR, Make sure the Issues tab is enabled. Once you merge this PR, WhiteSource Bolt for GitHub will scan your repository and create a GitHub Issue for every vulnerability detected in your repository.

    If you do not want a GitHub Issue to be created for each detected vulnerability, you can edit the '.whitesource' file and set the 'minSeverityLevel' parameter to 'NONE'.


    :question: Got questions? Check out WhiteSource Bolt for GitHub docs. If you need any further assistance then you can also request help here.

A simple passwordless authentication middleware that uses only email as the authentication provider
A simple passwordless authentication middleware that uses only email as the authentication provider

email auth A simple passwordless authentication middleware that uses only email as the authentication provider. Motivation I wanted to restrict access

Jul 27, 2022
A simple passwordless proxy authentication middleware using email.
A simple passwordless proxy authentication middleware using email.

email proxy auth A simple passwordless proxy authentication middleware that uses only email as the authentication provider. Motivation I wanted to res

Jul 27, 2022
Authelia: an open-source authentication and authorization server providing two-factor authentication
Authelia: an open-source authentication and authorization server providing two-factor authentication

Authelia is an open-source authentication and authorization server providing two

Jan 5, 2022
Authentication Plugin for implementing Form-Based, Basic, Local, LDAP, OpenID Connect, OAuth 2.0, SAML Authentication
Authentication Plugin for implementing Form-Based, Basic, Local, LDAP, OpenID Connect, OAuth 2.0, SAML Authentication

Authentication Plugin for implementing Form-Based, Basic, Local, LDAP, OpenID Connect, OAuth 2.0, SAML Authentication

Jan 8, 2023
Authorization and authentication. Learning go by writing a simple authentication and authorization service.

Authorization and authentication. Learning go by writing a simple authentication and authorization service.

Aug 5, 2022
A library for performing OAuth Device flow and Web application flow in Go client apps.
A library for performing OAuth Device flow and Web application flow in Go client apps.

oauth A library for Go client applications that need to perform OAuth authorization against a server, typically GitHub.com. Traditionally,

Dec 30, 2022
The Single Sign-On Multi-Factor portal for web apps
The Single Sign-On Multi-Factor portal for web apps

Authelia is an open-source authentication and authorization server providing two-factor authentication and single sign-on (SSO) for your applications

Jan 8, 2023
Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to create powerful modern API and web authentication.

❗ Cache package has been moved to libcache repository Go-Guardian Go-Guardian is a golang library that provides a simple, clean, and idiomatic way to

Dec 23, 2022
Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applications.

Goth: Multi-Provider Authentication for Go Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applic

Dec 29, 2022
Authentication service that keeps you in control without forcing you to be an expert in web security.
Authentication service that keeps you in control without forcing you to be an expert in web security.

Authentication service that keeps you in control without forcing you to be an expert in web security.

Jan 1, 2023
A simple authentication web application in Golang (using jwt)

Simple Authentication WebApp A simple authentication web app in Go (using JWT) Routes Path Method Data /api/v1/auth/register POST {"firstname":,"lastn

Feb 6, 2022
an SSO and OAuth / OIDC login solution for Nginx using the auth_request module
an SSO and OAuth / OIDC login solution for Nginx using the auth_request module

Vouch Proxy An SSO solution for Nginx using the auth_request module. Vouch Proxy can protect all of your websites at once. Vouch Proxy supports many O

Jan 4, 2023
sso, aka S.S.Octopus, aka octoboi, is a single sign-on solution for securing internal services
sso, aka S.S.Octopus, aka octoboi, is a single sign-on solution for securing internal services

sso See our launch blog post for more information! Please take the SSO Community Survey to let us know how we're doing, and to help us plan our roadma

Jan 5, 2023
A single sign-on solution based on go-oauth2 / oauth2 and gin-gonic/gin

A single sign-on solution based on go-oauth2 / oauth2 and gin-gonic/gin

Nov 17, 2021
A demo using go and redis to implement a token manager

使用go-redis实现一个令牌管理器 需求描述 假设我们当前的所有服务需要一个第三方的认证,认证形式为:在发送请求的时候带上第三方颁发的令牌,该令牌具有一个时效性 第三方的令牌可以通过某个接口获取,但是该接口做了单位时间内的同一ip的请求频率的限制,因此在并发的场景下,我们需要控制令牌获取接口的频

Oct 19, 2021
It is a JWT based implement of identity server.

JWTAuth 安裝說明 基本需求 安裝 docker 服務 安裝 OpenSSL 安裝指令 建立 OS 系統的 jwtauth 帳號 sudo useradd -m jwtauth 給予 JWTAuth 帳號可以操作 docker 的權限 sudo usermod -aG docker jwtau

Aug 10, 2022
This repository contains a set of tools to help you implement IndieAuth, both server and client, in Go.

This repository contains a set of tools to help you implement IndieAuth, both server and client, in Go.

Nov 26, 2022
OauthMicroservice-cassandraCluster - Implement microservice of oauth using golang and cassandra to store user tokens

implement microservice of oauth using golang and cassandra to store user tokens

Jan 24, 2022
:closed_lock_with_key: Middleware for keeping track of users, login states and permissions

Permissions2 Middleware for keeping track of users, login states and permissions. Online API Documentation godoc.org Features and limitations Uses sec

Dec 31, 2022