-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: SSO MFA - support for OIDC MaxAge #47292
Conversation
The PR changelog entry failed validation: Changelog entry not found in the PR body. Please add a "no-changelog" label to the PR, or changelog lines starting with |
@@ -4588,6 +4588,10 @@ message OIDCConnectorMFASettings { | |||
// Prompt is an optional OIDC prompt. An empty string omits prompt. | |||
// If not specified, it defaults to select_account for backwards compatibility. | |||
string prompt = 5; | |||
// MaxAge is the amount of time in nanoseconds that an IdP session is valid for. Defaults to |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we make this a proper duration instead of requiring the value be defined in nanoseconds?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems to cause issues - #29815 (comment)
I'll give it a try though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
google.protobuf.Duration max_age = 6 [(gogoproto.stdduration) = true];
Resulted in it not parsing from a string like 10s
.
google.protobuf.Duration max_age = 6;
Would not parse from an int or a string like 10s
, seems completely broken. Looks like we map - Mgoogle/protobuf/duration.proto=github.com/gogo/protobuf/types
, and gogoproto ofc has issues so I'm guessing changing this would be a huge pain.
google.protobuf.Duration max_age = 6 [
(gogoproto.stdduration) = true,
(gogoproto.casttype) = "Duration"
];
This works, though I don't think it's any better than the int64 as it still relies on gogoproto to overrule the actual type. I think it's essentially the same, but we can go with this.
Edit: nevermind, this breaks the protobuf gen file, might work without the (gogoproto.stdduration) = true
Edit2: Nope that breaks too. I don't see a way forward other than int64.
@codingllama any opinion on this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
codingllama any opinion on this?
Yes, gogo was a terrible idea. :P
Why does it not parse? In what way does it break?
No strong opinions on my part about using int64
here - I would prefer the stronger type but I know how much of a pain it can be on public-facing types (and on legacy/ to boot).
api/types/oidc.go
Outdated
return trace.BadParameter("max_age cannot be negative") | ||
} | ||
if maxAge.Round(time.Second) != maxAge { | ||
return trace.BadParameter("max_age must be a multiple of seconds") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This error message might be a bit confusing to reason about for users
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
4344e7b WDYT?
d9262bf
to
607d120
Compare
🤖 Vercel preview here: https://docs-ekff81dyr-goteleport.vercel.app/docs/ver/preview |
607d120
to
ac5e044
Compare
🤖 Vercel preview here: https://docs-51ivk3mmk-goteleport.vercel.app/docs/ver/preview |
@eriktate friendly ping to review |
ac5e044
to
3771cdb
Compare
🤖 Vercel preview here: https://docs-gfjkm7cf4-goteleport.vercel.app/docs/ver/preview |
@eriktate reminder to review, it's a pretty small change and I have some other PRs depending on it |
3771cdb
to
9899204
Compare
🤖 Vercel preview here: https://docs-c7vhdfccb-goteleport.vercel.app/docs/ver/preview |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm! Sorry about the delay 🙇
🤖 Vercel preview here: https://docs-ow5bgzbij-goteleport.vercel.app/docs/ver/preview |
Part of the implementation of SSO MFA
Unlike with SAML, we won't add a way to turn off max_age completely. Instead admins can set max_age to a reasonable number like
8h
or match whatever the IdP session TTL is for their configuration.