@lucifer-m
golang php js html css

Как настроить на авторизацию по паролю?

Мучаюсь уже пару часов (я плохо понимаю как работают структуры)
github.com/armon/go-socks5
Я просто хочу настроить вход по логину и паролю. Судя по отсутствии документации, я могу предположить что знающий человек за несколько минут поймёт как это сделать.
Зарание спасибо
  • Вопрос задан
  • 226 просмотров
Решения вопроса 2
Полагаю, так должно работать.
package main

import (
	"github.com/armon/go-socks5"
)

func main() {

	conf := &socks5.Config{
		AuthMethods: []socks5.Authenticator{
			&socks5.UserPassAuthenticator{
				socks5.StaticCredentials{
					"username1": "password1",
					"username2": "password2",
					"username3": "password3",
				},
			},
		},
	}

	server, err := socks5.New(conf)
	if err != nil {
		panic(err)
	}

	// Create SOCKS5 proxy on localhost port 8000
	if err := server.ListenAndServe("tcp", "127.0.0.1:8000"); err != nil {
		panic(err)
	}
}


Поясню, почему автор библиотеки сделал именно так.
AuthMethods является массивом, чтобы можно было задать одновременно несколько методов аутентификации, если один не прошел, пробуется следующий из массива.
Authenticator — это интерфейс, позволяющий подставлять на свое место все объекты, у которых есть методы:
Authenticate(reader io.Reader, writer io.Writer) (*AuthContext, error)
и
GetCode() uint8

UserPassAuthenticator как раз реализует эти методы для случая аутентификации по имени/паролю.
Внутри него есть поле Credentials, в которое можно подставить любой объект, удовлетворяющий интерфейсу CredentialStore, т.е., имеющий метод Valid(user, password string) bool. Соответственно, вы можете сюда подставить свой объект, которому аутентификатор будет кидать пару имя/пароль, а объект в ответ будет выдавать, валидная это пара или нет.
Простейшая реализация такого объекта есть в модуле в виде объекта StaticCredentials, который по сути является map[string]string и имеет метод, который проверяет, есть ли в этом map переданная пара юзер/пароль.

Т.е., модуль предоставляет вам выбор, использовать штатные реализации аутентификации или писать свои.
Ответ написан
Комментировать
xotkot
@xotkot
хорошо есть и хорошо весьма
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы