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

Better support for custom provider #1410

Closed
adamkissvcc opened this issue Jun 11, 2021 · 6 comments
Closed

Better support for custom provider #1410

adamkissvcc opened this issue Jun 11, 2021 · 6 comments
Labels
feat New feature or request. good first issue A good issue to tackle when being a novice to the project. help wanted We are looking for help on this one. stale Feedback from one or more authors is required to proceed.
Milestone

Comments

@adamkissvcc
Copy link

Is your feature request related to a problem? Please describe.

Currently it's very hard to add a custom provider without forking Kratos.

Describe the solution you'd like

I would like the providers to "register themselves" in an init() function, instead of the current func (c ConfigurationCollection) Provider.

in provider_config.go:

var Providers = map[string]func(config *Configuration, public *url.URL)Provider{}

func (c ConfigurationCollection) Provider(id string, public *url.URL) (Provider, error) {
	for _, p := range c.Providers {
		if newProvider, ok := Providers[p.ID]; ok {
			return newProvider(&p, public), nil
		}

		providerNames := make([]string, 0, len(Providers))
		for pName := range Providers {
			providerNames = append(providerNames, pName)
		}

		return nil, errors.Errorf("provider type %s is not supported, supported are: %v", p.Provider, providerNames)
	}

	return nil, errors.WithStack(herodot.ErrNotFound.WithReasonf(`OpenID Connect Provider "%s" is unknown or has not been configured`, id))
}

in provider_*.go (eg: provider_slack.go)

func init() {
	Providers["slack"] = NewProviderSlack
}

func NewProviderSlack(
	config *Configuration,
	public *url.URL,
) Provider {
	return &ProviderSlack{
		config: config,
		public: public,
	}
}

Additional context

This would be one step forward for making kratos more pluggable :) . I would be happy to write up a merge request if you are ok with this approach.

@aeneasr
Copy link
Member

aeneasr commented Jun 11, 2021

That makes a lot of sense to me :)

@aeneasr aeneasr added feat New feature or request. good first issue A good issue to tackle when being a novice to the project. help wanted We are looking for help on this one. labels Jun 11, 2021
@nanikjava
Copy link
Contributor

@aeneasr any pointer to point me in the right direction to work on this ?

@aeneasr
Copy link
Member

aeneasr commented Jul 30, 2021

I think the OP has some good context, what help specifically are you looking for?

@nanikjava
Copy link
Contributor

I think the OP has some good context, what help specifically are you looking for?

For a start I think what is the behaviour that is expected from the custom provider in terms of initialisation process.

joakimkarlsson added a commit to joakimkarlsson/kratos that referenced this issue Oct 15, 2021
This enables the registration of custom providers in init() functions as
described in issue ory#1410. With this, a custom implementation of the
oidc.Provider interface can be registered like follows:

func init() {
  oidc.CustomProviders["myprovider"] = NewProvider
}

func NewProvider(config *oidc.Configuration, public *url.URL) oidc.Provider {
  ...
}
@aeneasr aeneasr added this to the v0.10.0-alpha.1 milestone Mar 7, 2022
@aeneasr aeneasr modified the milestones: v0.10.0-alpha.1, v1.0.0 May 30, 2022
@github-actions
Copy link

github-actions bot commented Jul 4, 2023

Hello contributors!

I am marking this issue as stale as it has not received any engagement from the community or maintainers for a year. That does not imply that the issue has no merit! If you feel strongly about this issue

  • open a PR referencing and resolving the issue;
  • leave a comment on it and discuss ideas on how you could contribute towards resolving it;
  • leave a comment and describe in detail why this issue is critical for your use case;
  • open a new issue with updated details and a plan for resolving the issue.

Throughout its lifetime, Ory has received over 10.000 issues and PRs. To sustain that growth, we need to prioritize and focus on issues that are important to the community. A good indication of importance, and thus priority, is activity on a topic.

Unfortunately, burnout has become a topic of concern amongst open-source projects.

It can lead to severe personal and health issues as well as opening catastrophic attack vectors.

The motivation for this automation is to help prioritize issues in the backlog and not ignore, reject, or belittle anyone.

If this issue was marked as stale erroneously you can exempt it by adding the backlog label, assigning someone, or setting a milestone for it.

Thank you for your understanding and to anyone who participated in the conversation! And as written above, please do participate in the conversation if this topic is important to you!

Thank you 🙏✌️

@github-actions github-actions bot added the stale Feedback from one or more authors is required to proceed. label Jul 4, 2023
@github-actions github-actions bot closed this as completed Aug 4, 2023
@bcordobaq
Copy link

@aeneasr @vinckr Do you have any plans to reconsider this feature? Is there something available?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat New feature or request. good first issue A good issue to tackle when being a novice to the project. help wanted We are looking for help on this one. stale Feedback from one or more authors is required to proceed.
Projects
None yet
Development

No branches or pull requests

4 participants