Skip to content

feat: SSO MFA - support for OIDC MaxAge#47292

Merged
Joerger merged 5 commits intomasterfrom
joerger/oidc-mfa-max-age
Oct 16, 2024
Merged

feat: SSO MFA - support for OIDC MaxAge#47292
Joerger merged 5 commits intomasterfrom
joerger/oidc-mfa-max-age

Conversation

@Joerger
Copy link
Copy Markdown
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.

@Joerger Joerger requested a review from rosstimothy October 7, 2024 19:46
@github-actions github-actions Bot requested a review from eriktate October 7, 2024 19:46
@github-actions
Copy link
Copy Markdown
Contributor

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
// 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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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).

Comment thread 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")
Copy link
Copy Markdown
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
Copy Markdown
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
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Oct 8, 2024

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Oct 8, 2024

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

@Joerger Joerger requested a review from rosstimothy October 9, 2024 16:28
@Joerger
Copy link
Copy Markdown
Contributor Author

Joerger commented Oct 9, 2024

@eriktate friendly ping to review

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Oct 9, 2024

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

@Joerger
Copy link
Copy Markdown
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

@github-actions
Copy link
Copy Markdown
Contributor

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

Copy link
Copy Markdown
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 🙇

@Joerger Joerger enabled auto-merge October 16, 2024 20:00
@github-actions
Copy link
Copy Markdown
Contributor

🤖 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
@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