Открытый протокол для обеспечения безопасной авторизации простым и стандартным способом в веб-, мобильных и десктопных приложениях.
+--------+ +---------------+
| |--(A)- запрос на авторизацию ->| владелец |
| | |ресурса |
| |<-(B)-- грант на авторизацию ---| |
| | +---------------+
| |
| | +---------------+
| |--(C)-- грант на авторизацию -->| сервер |
| | |авторизации |
| |<-(D)----- токен доступа -------| |
| | +---------------+
| |
| | +---------------+
| |--(E)----- токен доступа ------>| сервер |
| | |ресурса |
| |<-(F)--- защищённый ресурс ---| |
+--------+ +---------------+
go get -u -v github.com/go-oauth2/oauth2/v4/...
server.go
package main
import (
"log"
"net/http"
"github.com/go-oauth2/oauth2/v4/errors"
"github.com/go-oauth2/oauth2/v4/manage"
"github.com/go-oauth2/oauth2/v4/models"
"github.com/go-oauth2/oauth2/v4/server"
"github.com/go-oauth2/oauth2/v4/store"
)
func main() {
manager := manage.NewDefaultManager()
// память для хранения токена
manager.MustTokenStorage(store.NewMemoryTokenStore())
``` // память для хранения клиента
clientStore := store.NewClientStore()
clientStore.Set("000000", &models.Client{
ID: "000000",
Secret: "999999",
Domain: "http://localhost",
})
manager.MapClientStorage(clientStore)
srv := server.NewDefaultServer(manager)
srv.SetAllowGetAccessRequest(true)
srv.SetClientInfoHandler(server.ClientFormHandler)```md
# Установка и запуск
```bash
go build server.go
./server
{
"access_token": "J86XVRYSNFCFI233KXDL0Q",
"expires_in": 7200,
"scope": "read",
"token_type": "Bearer"
}
Полный пример имитации модели авторизации кодом
Примеры имитации модели авторизации кодом, пожалуйста, проверьте пример
import (
"github.com/go-oauth2/oauth2/v4/generates"
"github.com/dgrijalva/jwt-go"
)
// ...
manager.MapAccessGenerate(generates.NewJWTAccessGenerate("", []byte("00000000"), jwt.SigningMethodHS512))
// Парсинг и проверка JWT токена доступа
token, err := jwt.ParseWithClaims(access, &generates.JWTAccessClaims{}, func(t *jwt.Token) (interface{}, error) {
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
return nil, fmt.Errorf("parse error")
}
return []byte("00000000"), nil
})
if err != nil {
// panic(err)
}claims, ok := token.Claims.(*generates.JWTAccessClaims)
if !ok || !token.Valid {
// panic("invalid token")
}
## Реализация хранилищ
```- [BuntDB](https://github.com/tidwall/buntdb)(используется по умолчанию как хранилище данных)
- [Redis](https://github.com/go-oauth2/redis)
- [MongoDB](https://github.com/go-oauth2/mongo)
- [MySQL](https://github.com/go-oauth2/mysql)
- [MySQL (Предоставляет как клиентское, так и токенное хранилище)](https://github.com/imrenagi/go-oauth2-mysql)
- [PostgreSQL](https://github.com/vgarvardt/go-oauth2-pg)
- [DynamoDB](https://github.com/contamobi/go-oauth2-dynamodb)
- [XORM](https://github.com/techknowlogick/go-oauth2-xorm)
- [XORM (MySQL, клиентское и токенное хранилище)](https://github.com/rainlay/go-oauth2-xorm)
- [GORM](https://github.com/techknowlogick/go-oauth2-gorm)
- [Firestore](https://github.com/tslamic/go-oauth2-firestore)
Авторское право © 2016 Lyric
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )