https://github.com/tsileo/indieauth
Implements an IndieAuth (an identity layer on top of OAuth 2.0) client/authentication middleware.
https://github.com/tsileo/indieauth
authentication-middleware go golang indieauth indieweb
Last synced: about 1 year ago
JSON representation
Implements an IndieAuth (an identity layer on top of OAuth 2.0) client/authentication middleware.
- Host: GitHub
- URL: https://github.com/tsileo/indieauth
- Owner: tsileo
- License: mit
- Created: 2018-03-25T17:38:43.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-04-26T15:22:53.000Z (about 6 years ago)
- Last Synced: 2025-03-24T08:08:17.931Z (over 1 year ago)
- Topics: authentication-middleware, go, golang, indieauth, indieweb
- Language: Go
- Homepage: https://a4.io/go/indieauth
- Size: 19.5 KB
- Stars: 12
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# IndieAuth
[](https://d.a4.io/tsileo/indieauth)
[](https://godoc.org/a4.io/go/indieauth)
[](https://goreportcard.com/report/a4.io/go/indieauth)
[](https://raw.githubusercontent.com/tsileo/indieauth/master/LICENSE)
This package implements an [IndieAuth (an identity layer on top of OAuth 2.0)](https://www.w3.org/TR/indieauth/) client/authentication middleware.
It implements an **IndieAuth Client** and will use your own external Authorization Endpoint.
It was designed to replace basic authentication when restricting access to private projects, it does not support multiple users.
Relies on the [sessions package from the Gorilla web toolkit](http://www.gorillatoolkit.org/pkg/sessions).
## QuickStart
```bash
$ get get a4.io/go/indieauth
```
**Note:** If you are not using gorilla/mux, you need to wrap your handlers with [`context.ClearHandler`](http://www.gorillatoolkit.org/pkg/context#ClearHandler) to prevent leaking memory.
```go
package main
import (
"log"
"net/http"
"a4.io/go/indieauth"
"github.com/gorilla/context"
"github.com/gorilla/sessions"
)
var cookieStore = sessions.NewCookieStore([]byte("my-secret"))
func main() {
ia, err:= indieauth.New(cookieStore, "https://my.indie.auth.domain")
if err != nil {
panic(err)
}
iaMiddleware = ia.Middleware()
http.HandleFunc(indieauth.DefaultRedirectPath, ia.RedirectHandler)
http.HandleFunc("/logout", func(w http.ResponseWriter, r *http.Request) {
indie.Logout(w, r)
})
http.Handle("/", iaMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("YAY!"))
})))
log.Fatal(http.ListenAndServe(":8011", context.ClearHandler(http.DefaultServeMux)))
}
```