-
Notifications
You must be signed in to change notification settings - Fork 139
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
Create guide for identity provider deployment #1741
base: main
Are you sure you want to change the base?
Conversation
This guide outlines a minimally viable identity provider to provide non-interactive signing for clients or services. This guide could be followed by a package registry for example to create a basic identity provider that doesn't fully implement the OIDC protocol but issued OIDC-compliant tokens. Signed-off-by: Hayden B <[email protected]>
Signed-off-by: Hayden B <[email protected]>
Signed-off-by: Hayden B <[email protected]>
Wrote this up a bit ago to help onboard a new provider who didn't want to have an interactive signing flow where a user was present. This doc outlines the requirements of an identity provider that can issue ID tokens for those who are willing to stand up their own provider. This is effectively a generalization of GitHub Actions or other CI identity providers, where the identity provider a) will provide an OIDC-compliant ID token (which can be obtained by exchanging a user credential, the service generates it on behalf of a user, etc), b) the OIDC-compliant well-known endpoint, and c) the public keys endpoint provided by the configuration at the well-known endpoint. I might merge this with the other IDP requirements doc later on, as well as an upcoming doc around public-good policy for IDPs. PTAL and let me know if you have any feedback! |
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.
looks great to me, i think it is a really nice start and eventually we can improve it
Do we want to continue to use email as a user identifier? |
What's the alternative, for email-based IdPs? Sigstore has support for non-email identifiers as well, but email seems appropriate when the IdP is itself an email provider 🙂 Edit: oh, I see what you mean -- yeah, IMO we should distinguish between emails as identities and service users as identities: both are fine, but a service that provides usernames should represent them with |
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 is great! Left one thought on identity formats/types 🙂
|
||
Fulcio has support for many different token identities, though the most common would be [email](https://github.com/sigstore/fulcio/blob/main/docs/oidc.md\#email) and [CI workflow](https://github.com/sigstore/fulcio/blob/main/docs/oid-info.md\#requirements-to-support-signing-with-cicd-workload-identities). Reach out to Fulcio maintainers for more information if you have any questions or additional requirements. | ||
|
||
We would expect identities for this type of minimal deployment to be represented as an email. For example, if users authenticate to the service with a username, the email address could be `[email protected]`. If this would conflict with existing email addresses, a service could choose another representation like `[email protected]`. In the case of emails in tokens, Fulcio only verifies that the identity string matches an email address regular expression, not that the email is addressable. |
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.
Per #1741 (comment): could/should we distinguish between email and non-email identities better here?
Off the top of my head, the current specified behavior is:
- A service can provide an email identity (including a 3p email identity) when that email is effectively the user identity on the service. For example, the GitHub user IDP offers
[email protected]
as a valid email address corresponding to the GitHub account being identified. - If a service offers non-email user identities, it should use the dedicated
OtherName
form for that service, to avoid confusion/conflation with the email namespace. For example, for a newwidgets.example
IdP, userfoo
should be given thefoo!widgets.example
identifier.
There are only 2 public providers (that I know of) that also email providers. Google and Apple. Neither works directly with Sigstore. Using
|
@@ -0,0 +1,73 @@ | |||
# Deploying an Identity Provider for Fulcio Integration |
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.
Looks good, but I would add some notes how this is for the PGS, as it being in docs, some might expect this to be guidance for private sigstore deployments (I guess it could be). I did not figure out if was the former until I reached the end (and it spoke of deploying to staging).
This guide outlines a minimally viable identity provider to provide non-interactive signing for clients or services. This guide could be followed by a package registry for example to create a basic identity provider that doesn't fully implement the OIDC protocol but issued OIDC-compliant tokens.
Summary
Release Note
Documentation