1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/nilorg-oauth2

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

OAuth2

Использование

go get -u github.com/nilorg/oauth2

Импорт

import "github.com/nilorg/oauth2"

Пример

oauth2-server

server/client

Документация

  1. «Понимание OAuth 2.0» автор: Руань Ифэн (阮一峰)
  2. RFC 6749
  3. RFC 8628
  4. RFC 7662
  5. RFC 7009

AuthorizationCode

Режим авторизации с использованием кода (authorization code) является наиболее полным и строгим режимом авторизации.

Его особенностью является взаимодействие между клиентским фоновым сервером и сервером аутентификации поставщика услуг.

Implicit

Упрощённый режим (implicit grant type) не проходит через сервер приложения третьей стороны, а запрашивает токен непосредственно у сервера аутентификации в браузере, пропуская шаг «кода авторизации», отсюда и название.

Все шаги выполняются в браузере, токен виден посетителю, и клиенту не требуется аутентификация.

ResourceOwnerPasswordCredentials

В режиме пароля владельца ресурса (Resource Owner Password Credentials Grant) пользователь предоставляет своё имя пользователя и пароль клиенту.

Клиент использует эту информацию для запроса авторизации у поставщика услуг.

В этом режиме пользователь должен предоставить свой пароль клиенту, но клиент не должен сохранять пароль.

Обычно это используется, когда пользователь очень доверяет клиенту, например, клиент является частью операционной системы или выпущен известной компанией.

И только если другие режимы авторизации не могут быть выполнены, поставщик услуг может рассмотреть возможность использования этого режима.

ClientCredentials

Режим клиента (Client Credentials Grant), в котором клиент регистрируется напрямую, вместо того чтобы действовать от имени пользователя, запрашивает услуги у поставщика услуг, фактически не существует проблемы авторизации.

Строго говоря, режим клиента не относится к проблеме, которую решает OAuth.

В этом режиме пользователь напрямую регистрируется у клиента, и клиент запрашивает услуги от имени себя, на самом деле нет проблемы авторизации.

DeviceCode

Режим устройства (Device Code).

TokenIntrospection

Точка интроспекции токена (Token Introspection).

TokenRevocation

Точка аннулирования токена (Token Revocation).

Сервер

package main

import (
    "fmt"
    "net/http"

    "github.com/gin-gonic/gin"
    "github.com/nilorg/oauth2"
)

var (
    clients = map[string]string{
        "oauth2_client": "password",
    }
)

func main() {
    srv := oauth2.NewServer()
    srv.VerifyClient = func(basic *oauth2.ClientBasic) (err error) {
        pwd, ok := clients[basic.ID]
        if !ok {
            err = oauth2.ErrInvalidClient
            return
        }
        basic = &oauth2.ClientBasic{
            ID:     basic.ID,
            Secret: pwd,
        }
        return
    }
    srv.VerifyClientID = func(clientID string) (err error) {
        _, ok := clients[clientID]
        if !ok {
        err = oath2.ErrInvalidClient
        }
        return
    }
    srv.VerifyCode = func(code, clientID, redirectURI string) (value *oauth2.CodeValue, err error) {
        //err = oauth2.ErrUnauthorizedClient
        // 查询缓存/数据库中的code信息
        value = &oauth2.CodeValue{
            ClientID:    clientID,
            RedirectURI: redirectURI,
            Scope:       []string{"a", "b", "c"},
        }
        return
    }
    srv.GenerateCode = func(clientID, openID, redirectURI string, scope []string) (code string, err error) {
        code = oauth2.RandomCode()
        return
    }}
    srv.VerifyRedirectURI = func(clientID, redirectURI string) (err error) {
        fmt.Println(clientID)
        fmt.Println(redirectURI)
        // err = oauth2.ErrInvalidRedirectURI
        return
    }

    srv.VerifyPassword = func(username, password string) (openID string, err error) {
        if username != "a" || password != "b" {
            err = oauth2.ErrUnauthorizedClient
            return
        }
        openID = "xxxx"
        return
    }

    srv.VerifyScope = func(scopes []string, clientID string) (err error) {
        // err = oauth2.ErrInvalidScope
        return
    }

    srv.GenerateAccessToken = oauth2.NewDefaultGenerateAccessToken([]byte("xxxxx"))
    srv.RefreshAccessToken = oauth2.NewDefaultRefreshAccessToken([]byte("xxxxx"))
    srv.ParseAccessToken = oauth2.NewDefaultParseAccessToken([]byte("xxxxx"))

    srv.GenerateDeviceAuthorization = func(issuer, verificationURI, clientID, scope string) (resp *oauth2.DeviceAuthorizationResponse, err error) {
        resp = &oauth2.DeviceAuthorizationResponse{
            DeviceCode:            oauth2.RandomCode(),
            UserCode:              oauth2.RandomUserCode(),
            VerificationURI:       verificationURI,
            VerificationURIQrcode: "",
            ExpiresIn:             0,
            Interval:

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Библиотека сервера и клиента Go OAuth2 (автоматическая синхронизация). Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/nilorg-oauth2.git
git@api.gitlife.ru:oschina-mirror/nilorg-oauth2.git
oschina-mirror
nilorg-oauth2
nilorg-oauth2
master