gin-server/README.md

135 lines
2.8 KiB
Markdown
Raw Normal View History

2016-09-25 20:08:45 +08:00
# Gin OAuth 2.0 Server
> Using Gin framework implementation OAuth 2.0 services
[![License][License-Image]][License-Url] [![ReportCard][ReportCard-Image]][ReportCard-Url] [![GoDoc][GoDoc-Image]][GoDoc-Url]
## Quick Start
### Download and install
``` bash
$ go get -u github.com/go-oauth2/gin-server
```
### Create file `server.go`
``` go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/go-oauth2/gin-server"
"gopkg.in/oauth2.v3/manage"
2016-11-29 09:08:31 +08:00
"gopkg.in/oauth2.v3/models"
aserver "gopkg.in/oauth2.v3/server"
2016-09-25 20:08:45 +08:00
"gopkg.in/oauth2.v3/store"
)
func main() {
manager := manage.NewDefaultManager()
2016-11-29 09:08:31 +08:00
// token store
2016-09-25 20:08:45 +08:00
manager.MustTokenStorage(store.NewMemoryTokenStore())
2016-11-29 09:08:31 +08:00
// client store
clientStore := store.NewClientStore()
clientStore.Set("000000", &models.Client{
ID: "000000",
Secret: "999999",
Domain: "http://localhost",
})
manager.MapClientStorage(clientStore)
2016-09-25 20:08:45 +08:00
// Initialize the oauth2 service
server.InitServer(manager)
server.SetAllowGetAccessRequest(true)
2016-11-29 09:08:31 +08:00
server.SetClientInfoHandler(aserver.ClientFormHandler)
2016-09-25 20:08:45 +08:00
g := gin.Default()
2016-11-29 09:08:31 +08:00
auth := g.Group("/oauth2")
{
auth.GET("/token", server.HandleTokenRequest)
}
2016-09-25 20:08:45 +08:00
api := g.Group("/api")
{
2016-11-29 09:08:31 +08:00
api.Use(server.HandleTokenVerify())
2016-09-25 20:08:45 +08:00
api.GET("/test", func(c *gin.Context) {
2016-11-29 09:08:31 +08:00
ti, exists := c.Get("AccessToken")
if exists {
c.JSON(http.StatusOK, ti)
return
}
c.String(http.StatusOK, "not found")
2016-09-25 20:08:45 +08:00
})
}
g.Run(":9096")
}
```
### Build and run
``` bash
$ go build server.go
$ ./server
```
### Open in your web browser
#### The token information
```
2016-11-29 09:08:31 +08:00
http://localhost:9096/oauth2/token?grant_type=client_credentials&client_id=000000&client_secret=999999&scope=read
2016-09-25 20:08:45 +08:00
```
``` json
{
2016-11-29 09:08:31 +08:00
"access_token": "AJPNSQO2PCITABYX0RFLWG",
2016-09-25 20:08:45 +08:00
"expires_in": 7200,
"scope": "read",
"token_type": "Bearer"
}
```
#### The authentication token
```
2016-11-29 09:08:31 +08:00
http://localhost:9096/api/test?access_token=AJPNSQO2PCITABYX0RFLWG
```
``` json
{
"ClientID": "000000",
"UserID": "",
"RedirectURI": "",
"Scope": "read",
"Code": "",
"CodeCreateAt": "0001-01-01T00:00:00Z",
"CodeExpiresIn": 0,
"Access": "AJPNSQO2PCITABYX0RFLWG",
"AccessCreateAt": "2016-11-29T09:00:52.617250916+08:00",
"AccessExpiresIn": 7200000000000,
"Refresh": "",
"RefreshCreateAt": "0001-01-01T00:00:00Z",
"RefreshExpiresIn": 0
}
2016-09-25 20:08:45 +08:00
```
## MIT License
```
Copyright (c) 2016 Lyric
```
[License-Url]: http://opensource.org/licenses/MIT
[License-Image]: https://img.shields.io/npm/l/express.svg
[ReportCard-Url]: https://goreportcard.com/report/github.com/go-oauth2/gin-server
[ReportCard-Image]: https://goreportcard.com/badge/github.com/go-oauth2/gin-server
[GoDoc-Url]: https://godoc.org/github.com/go-oauth2/gin-server
2016-11-29 09:08:31 +08:00
[GoDoc-Image]: https://godoc.org/github.com/go-oauth2/gin-server?status.svg