Skip to content
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

Merged
merged 5 commits into from
Oct 16, 2024
Merged

Conversation

Joerger
Copy link
Contributor

@Joerger Joerger commented Oct 7, 2024

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.

Copy link

github-actions bot commented Oct 7, 2024

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 changelog: followed by the changelog entries for the PR.

@Joerger Joerger added the no-changelog Indicates that a PR does not require a changelog entry label Oct 7, 2024
@Joerger Joerger mentioned this pull request Oct 5, 2024
@@ -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
Copy link
Contributor

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?

Copy link
Contributor Author

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.

Copy link
Contributor Author

@Joerger Joerger Oct 8, 2024

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?

Copy link
Contributor

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).

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")
Copy link
Contributor

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4344e7b WDYT?

@Joerger Joerger force-pushed the joerger/oidc-mfa-max-age branch 2 times, most recently from d9262bf to 607d120 Compare October 8, 2024 19:52
Copy link

github-actions bot commented Oct 8, 2024

🤖 Vercel preview here: https://docs-ekff81dyr-goteleport.vercel.app/docs/ver/preview

Copy link

github-actions bot commented Oct 8, 2024

🤖 Vercel preview here: https://docs-51ivk3mmk-goteleport.vercel.app/docs/ver/preview

@Joerger
Copy link
Contributor Author

Joerger commented Oct 9, 2024

@eriktate friendly ping to review

Copy link

github-actions bot commented Oct 9, 2024

🤖 Vercel preview here: https://docs-gfjkm7cf4-goteleport.vercel.app/docs/ver/preview

@Joerger
Copy link
Contributor Author

Joerger commented Oct 11, 2024

@eriktate reminder to review, it's a pretty small change and I have some other PRs depending on it

Copy link

🤖 Vercel preview here: https://docs-c7vhdfccb-goteleport.vercel.app/docs/ver/preview

Copy link
Contributor

@eriktate eriktate left a 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 🙇

Copy link

🤖 Vercel preview here: https://docs-ow5bgzbij-goteleport.vercel.app/docs/ver/preview

@Joerger Joerger added this pull request to the merge queue Oct 16, 2024
Merged via the queue into master with commit 94295c9 Oct 16, 2024
43 checks passed
@Joerger Joerger deleted the joerger/oidc-mfa-max-age branch October 16, 2024 20:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
no-changelog Indicates that a PR does not require a changelog entry size/sm
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants