Manager: add SHA256 password hasher for worker auth
Add a SHA256 password hasher for worker authentication. It's not used at the moment, but can be switched to for faster API queries. Note that switching will cause authentication errors on already-existing workers, which means they'll automatically re-register. This is mostly useful for debugging & profiling purposes.
This commit is contained in:
parent
20be78ea0f
commit
2e1a9c61b8
@ -4,6 +4,8 @@ package api_impl
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/sha256"
|
||||||
|
"crypto/subtle"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
oapi_middle "github.com/deepmap/oapi-codegen/pkg/middleware"
|
oapi_middle "github.com/deepmap/oapi-codegen/pkg/middleware"
|
||||||
@ -23,7 +25,7 @@ const (
|
|||||||
var (
|
var (
|
||||||
errAuthBad = errors.New("no such worker known")
|
errAuthBad = errors.New("no such worker known")
|
||||||
|
|
||||||
passwordHasher = BCryptHasher{}
|
passwordHasher WorkerPasswordHasher = BCryptHasher{}
|
||||||
)
|
)
|
||||||
|
|
||||||
type WorkerPasswordHasher interface {
|
type WorkerPasswordHasher interface {
|
||||||
@ -44,6 +46,22 @@ func (h BCryptHasher) CompareHashAndPassword(hashedPassword, password []byte) er
|
|||||||
return bcrypt.CompareHashAndPassword(hashedPassword, password)
|
return bcrypt.CompareHashAndPassword(hashedPassword, password)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SHA256Hasher struct{}
|
||||||
|
|
||||||
|
func (h SHA256Hasher) hash(password []byte) []byte {
|
||||||
|
hasher := sha256.New()
|
||||||
|
return hasher.Sum(password)
|
||||||
|
}
|
||||||
|
func (h SHA256Hasher) GenerateHashedPassword(password []byte) ([]byte, error) {
|
||||||
|
return h.hash(password), nil
|
||||||
|
}
|
||||||
|
func (h SHA256Hasher) CompareHashAndPassword(hashedPassword, password []byte) error {
|
||||||
|
if subtle.ConstantTimeCompare(hashedPassword, h.hash(password)) != 1 {
|
||||||
|
return bcrypt.ErrMismatchedHashAndPassword
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// OpenAPI authentication function for authing workers.
|
// OpenAPI authentication function for authing workers.
|
||||||
// The worker will be fetched from the database and stored in the request context.
|
// The worker will be fetched from the database and stored in the request context.
|
||||||
func WorkerAuth(ctx context.Context, authInfo *openapi3filter.AuthenticationInput, persist PersistenceService) error {
|
func WorkerAuth(ctx context.Context, authInfo *openapi3filter.AuthenticationInput, persist PersistenceService) error {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user