Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -479,7 +479,7 @@ func (c *Client) dialGRPC(ctx context.Context, addr string) error {
otelUnaryClientInterceptor(),
metadata.UnaryClientInterceptor,
interceptors.GRPCClientUnaryErrorInterceptor,
interceptors.WithMFAUnaryInterceptor(c.performMFACeremony),
interceptors.WithMFAUnaryInterceptor(c.performAdminActionMFACeremony),
breaker.UnaryClientInterceptor(cb),
),
grpc.WithChainStreamInterceptor(
Expand Down
10 changes: 7 additions & 3 deletions api/client/mfa.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,22 @@ import (
"github.com/gravitational/trace"

"github.com/gravitational/teleport/api/client/proto"
mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1"
"github.com/gravitational/teleport/api/mfa"
)

// performMFACeremony retrieves an MFA challenge from the server, prompts the
// user to answer the challenge, and returns the resulting MFA response.
func (c *Client) performMFACeremony(ctx context.Context, promptOpts ...mfa.PromptOpt) (*proto.MFAAuthenticateResponse, error) {
// performAdminActionMFACeremony retrieves an MFA challenge from the server,
// prompts the user to answer the challenge, and returns the resulting MFA response.
func (c *Client) performAdminActionMFACeremony(ctx context.Context, promptOpts ...mfa.PromptOpt) (*proto.MFAAuthenticateResponse, error) {
if c.c.MFAPromptConstructor == nil {
return nil, trace.BadParameter("missing PromptAdminRequestMFA field, client cannot perform MFA ceremony")
}

chal, err := c.CreateAuthenticateChallenge(ctx, &proto.CreateAuthenticateChallengeRequest{
Request: &proto.CreateAuthenticateChallengeRequest_ContextUser{},
ChallengeExtensions: &mfav1.ChallengeExtensions{
Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_ADMIN_ACTION,
},
})
if err != nil {
return nil, trace.Wrap(err)
Expand Down
2 changes: 1 addition & 1 deletion api/client/mfa_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ func TestPerformMFACeremony(t *testing.T) {
clt, err := New(ctx, cfg)
require.NoError(t, err)

resp, err := clt.performMFACeremony(ctx)
resp, err := clt.performAdminActionMFACeremony(ctx)
require.NoError(t, err)
require.Equal(t, mfaTestResp.Response, resp.Response)
}
Expand Down
4 changes: 4 additions & 0 deletions lib/client/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import (
apidefaults "github.com/gravitational/teleport/api/defaults"
devicepb "github.com/gravitational/teleport/api/gen/proto/go/teleport/devicetrust/v1"
kubeproto "github.com/gravitational/teleport/api/gen/proto/go/teleport/kube/v1"
mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1"
"github.com/gravitational/teleport/api/mfa"
apitracing "github.com/gravitational/teleport/api/observability/tracing"
tracessh "github.com/gravitational/teleport/api/observability/tracing/ssh"
Expand Down Expand Up @@ -5254,6 +5255,9 @@ func (tc *TeleportClient) HeadlessApprove(ctx context.Context, headlessAuthentic
Request: &proto.CreateAuthenticateChallengeRequest_ContextUser{
ContextUser: &proto.ContextUser{},
},
ChallengeExtensions: &mfav1.ChallengeExtensions{
Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_HEADLESS_LOGIN,
},
})
if err != nil {
return trace.Wrap(err)
Expand Down
4 changes: 4 additions & 0 deletions lib/client/cluster_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import (

"github.com/gravitational/teleport/api/client/proto"
proxyclient "github.com/gravitational/teleport/api/client/proxy"
mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1"
"github.com/gravitational/teleport/api/mfa"
"github.com/gravitational/teleport/lib/auth"
"github.com/gravitational/teleport/lib/resumption"
Expand Down Expand Up @@ -345,6 +346,9 @@ func PerformMFACeremony(ctx context.Context, params PerformMFACeremonyParams) (*
ContextUser: &proto.ContextUser{},
},
MFARequiredCheck: mfaRequiredReq,
ChallengeExtensions: &mfav1.ChallengeExtensions{
Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_USER_SESSION,
},
})
if err != nil {
return nil, nil, trace.Wrap(err)
Expand Down
4 changes: 4 additions & 0 deletions lib/teleterm/clusters/cluster_headless.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/gravitational/trace"

"github.com/gravitational/teleport/api/client/proto"
mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1"
"github.com/gravitational/teleport/api/types"
)

Expand Down Expand Up @@ -117,6 +118,9 @@ func (c *Cluster) UpdateHeadlessAuthenticationState(ctx context.Context, headles
Request: &proto.CreateAuthenticateChallengeRequest_ContextUser{
ContextUser: &proto.ContextUser{},
},
ChallengeExtensions: &mfav1.ChallengeExtensions{
Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_HEADLESS_LOGIN,
},
})
if err != nil {
return trace.Wrap(err)
Expand Down
10 changes: 9 additions & 1 deletion tool/tsh/common/mfa.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/gravitational/teleport"
"github.com/gravitational/teleport/api/client/proto"
"github.com/gravitational/teleport/api/constants"
mfav1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/mfa/v1"
"github.com/gravitational/teleport/api/mfa"
"github.com/gravitational/teleport/api/types"
"github.com/gravitational/teleport/api/utils/prompt"
Expand Down Expand Up @@ -334,7 +335,11 @@ func (c *mfaAddCommand) addDeviceRPC(ctx context.Context, tc *client.TeleportCli

// Issue the authn challenge.
// Required for the registration challenge.
authChallenge, err := aci.CreateAuthenticateChallenge(ctx, &proto.CreateAuthenticateChallengeRequest{})
authChallenge, err := aci.CreateAuthenticateChallenge(ctx, &proto.CreateAuthenticateChallengeRequest{
ChallengeExtensions: &mfav1.ChallengeExtensions{
Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_MANAGE_DEVICES,
},
})
if err != nil {
return trace.Wrap(err)
}
Expand Down Expand Up @@ -596,6 +601,9 @@ func (c *mfaRemoveCommand) run(cf *CLIConf) error {
Request: &proto.CreateAuthenticateChallengeRequest_ContextUser{
ContextUser: &proto.ContextUser{},
},
ChallengeExtensions: &mfav1.ChallengeExtensions{
Scope: mfav1.ChallengeScope_CHALLENGE_SCOPE_MANAGE_DEVICES,
},
})
if err != nil {
return trace.Wrap(err)
Expand Down