feat: reva app auth
This commit is contained in:
@@ -194,6 +194,7 @@ func Server(cfg *config.Config) *cli.Command {
|
|||||||
|
|
||||||
{
|
{
|
||||||
middlewares := loadMiddlewares(logger, cfg, userInfoCache, signingKeyStore, traceProvider, *m, userProvider, gatewaySelector)
|
middlewares := loadMiddlewares(logger, cfg, userInfoCache, signingKeyStore, traceProvider, *m, userProvider, gatewaySelector)
|
||||||
|
|
||||||
server, err := proxyHTTP.Server(
|
server, err := proxyHTTP.Server(
|
||||||
proxyHTTP.Handler(lh.Handler()),
|
proxyHTTP.Handler(lh.Handler()),
|
||||||
proxyHTTP.Logger(logger),
|
proxyHTTP.Logger(logger),
|
||||||
@@ -246,10 +247,14 @@ func Server(cfg *config.Config) *cli.Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
func loadMiddlewares(logger log.Logger, cfg *config.Config,
|
func loadMiddlewares(logger log.Logger, cfg *config.Config,
|
||||||
userInfoCache, signingKeyStore microstore.Store, traceProvider trace.TracerProvider, metrics metrics.Metrics,
|
userInfoCache, signingKeyStore microstore.Store, traceProvider trace.TracerProvider, metrics metrics.Metrics,
|
||||||
userProvider backend.UserBackend, gatewaySelector pool.Selectable[gateway.GatewayAPIClient]) alice.Chain {
|
userProvider backend.UserBackend, gatewaySelector pool.Selectable[gateway.GatewayAPIClient]) alice.Chain {
|
||||||
|
|
||||||
|
=======
|
||||||
|
func loadMiddlewares(logger log.Logger, cfg *config.Config, userInfoCache, signingKeyStore microstore.Store, traceProvider trace.TracerProvider, metrics metrics.Metrics) alice.Chain {
|
||||||
|
>>>>>>> a9df2a66b1 (feat: reva app auth)
|
||||||
rolesClient := settingssvc.NewRoleService("com.owncloud.api.settings", cfg.GrpcClient)
|
rolesClient := settingssvc.NewRoleService("com.owncloud.api.settings", cfg.GrpcClient)
|
||||||
policiesProviderClient := policiessvc.NewPoliciesProviderService("com.owncloud.api.policies", cfg.GrpcClient)
|
policiesProviderClient := policiessvc.NewPoliciesProviderService("com.owncloud.api.policies", cfg.GrpcClient)
|
||||||
|
|
||||||
@@ -293,6 +298,17 @@ func loadMiddlewares(logger log.Logger, cfg *config.Config,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
authenticators = append(authenticators, middleware.AppAuthAuthenticator{
|
||||||
|
Logger: logger,
|
||||||
|
RevaGatewaySelector: gatewaySelector,
|
||||||
|
})
|
||||||
|
authenticators = append(authenticators, middleware.PublicShareAuthenticator{
|
||||||
|
Logger: logger,
|
||||||
|
RevaGatewaySelector: gatewaySelector,
|
||||||
|
})
|
||||||
|
>>>>>>> a9df2a66b1 (feat: reva app auth)
|
||||||
authenticators = append(authenticators, middleware.NewOIDCAuthenticator(
|
authenticators = append(authenticators, middleware.NewOIDCAuthenticator(
|
||||||
middleware.Logger(logger),
|
middleware.Logger(logger),
|
||||||
middleware.UserInfoCache(userInfoCache),
|
middleware.UserInfoCache(userInfoCache),
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
package middleware
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
gateway "github.com/cs3org/go-cs3apis/cs3/gateway/v1beta1"
|
||||||
|
"github.com/cs3org/reva/v2/pkg/rgrpc/todo/pool"
|
||||||
|
"github.com/owncloud/ocis/v2/ocis-pkg/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AppAuthAuthenticator defines the app auth authenticator
|
||||||
|
type AppAuthAuthenticator struct {
|
||||||
|
Logger log.Logger
|
||||||
|
RevaGatewaySelector *pool.Selector[gateway.GatewayAPIClient]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Authenticate implements the authenticator interface to authenticate requests via app auth.
|
||||||
|
func (m AppAuthAuthenticator) Authenticate(r *http.Request) (*http.Request, bool) {
|
||||||
|
if isPublicPath(r.URL.Path) {
|
||||||
|
// The authentication of public path requests is handled by another authenticator.
|
||||||
|
// Since we can't guarantee the order of execution of the authenticators, we better
|
||||||
|
// implement an early return here for paths we can't authenticate in this authenticator.
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
|
username, password, ok := r.BasicAuth()
|
||||||
|
if !ok {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
next, err := m.RevaGatewaySelector.Next()
|
||||||
|
if err != nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
authenticateResponse, err := next.Authenticate(r.Context(), &gateway.AuthenticateRequest{
|
||||||
|
Type: "appauth",
|
||||||
|
ClientId: username,
|
||||||
|
ClientSecret: password,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
r.Header.Add(_headerRevaAccessToken, authenticateResponse.GetToken())
|
||||||
|
|
||||||
|
return r, true
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user