Полностью модульный, поддерживает обработку сервера для http/fasthttp, поддержка хранения токенов в redis/mongodb
$ go get -u gopkg.in/oauth2.v2/...
package main
import (
"log"
"net/http"
"gopkg.in/oauth2.v2/manage"
"gopkg.in/oauth2.v2/models"
"gopkg.in/oauth2.v2/server"
"gopkg.in/oauth2.v2/store/client"
"gopkg.in/oauth2.v2/store/token"
)
func main() {
manager := manage.NewRedisManager(
&token.RedisConfig{Addr: "192.168.33.70:6379"},
)
manager.MapClientStorage(client.NewTempStore())
srv := server.NewServer(server.NewConfig(), manager)
http.HandleFunc("/authorize", func(w http.ResponseWriter, r *http.Request) {
authReq, err := srv.GetAuthorizeRequest(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// TODO: Аутентификация и авторизация
authReq.UserID = "000000"
err = srv.HandleAuthorizeRequest(w, authReq)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
})
http.HandleFunc("/token", func(w http.ResponseWriter, r *http.Request) {
err := srv.HandleTokenRequest(w, r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
}
})
log.Fatal(http.ListenAndServe(":9096", nil))
}
srv := server.NewFastServer(server.NewConfig(), manager)
fasthttp.ListenAndServe(":9096", func(ctx *fasthttp.RequestCtx) {
switch string(ctx.Request.URI().Path()) {
case "/authorize":
authReq, err := srv.GetAuthorizeRequest(ctx)
if err != nil {
ctx.Error(err.Error(), 400)
return
}
authReq.UserID = "000000"
// TODO: Аутентификация и авторизация
err = srv.HandleAuthorizeRequest(ctx, authReq)
if err != nil {
ctx.Error(err.Error(), 400)
}
case "/token":
err := srv.HandleTokenRequest(ctx)
if err != nil {
ctx.Error(err.Error(), 400)
}
}
})
```Тестирование
----
> [goconvey](https://github.com/smartystreets/goconvey)
``` bash
$ goconvey -port=9092
Пример тестирования авторизации по коду, подробнее здесь
Copyright 2016. Все права защищены.
Разрешено к использованию под лицензией Apache License, Version 2.0 ("Лицензия"); вы не можете использовать этот файл, если не будете соблюдать условия Лицензии. Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Если законом не требуется, или не согласовано письменно, то программное обеспечение, распространяемое по Лицензии, распространяется на условиях "КАК ЕСТЬ", БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, как явных, так и подразумеваемых. Смотрите Лицензию для конкретного языка, регулирующего права и условия использования по Лицензии.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )