Spring Security: Different authentication methods depending on entity

て烟熏妆下的殇ゞ 提交于 2020-01-13 18:56:27

问题


first post here, hope im doing right.

In a project, we have a scenario where we have a single web application with multiple entities. Currently, the login is managed via default JDBC Spring Security provider, working fine.

For a new requirement, we need that each entity can have their own login method (currently 2 methods would be available, the JDBC one, which is the current one, and the second method would be authentication via SAML, with each entity defining their own IdP, but this is another story)

I need some guidelines on how this can be achieved, I have done some search and I have found providers for different URL's, etc... But not different login methods for the same app and url's depending on the user type or entity.

Is a good approach to have a custom single entry point where we can check the entity user and then use the suitable authentication provider?

Kind regards,

Alex


回答1:


As each of your users might be using a different IDP you will in any case need to determine the username before proceeding with initialization of the authentication process - but you already know this.

One approach to take (similar to what Microsoft is using with the Office 365 for corporate users) is:

  • display a login page with fields for standard username + password
  • once user enters username and blurs the input field, you make an AJAX call (to your custom API made for this purpose) and fetch information about authentication type + IDP to use for this user
  • in case the type is password you simply let user continue with filling in the password field and POST to the same place as you're used to for processing with the JDBC provider
  • in case the type is federated authentication you initialize authentication with the correct IDP by redirecting to /saml/login?idp=xyz and continue with the SAML flow

It's possible to avoid any APIs by submitting the form once user enters the username, or let user click a "Continue" button. It would then make sense to use a custom EntryPoint which:

  • redirects user to the main login page in case it wasn't provided with a username
  • displays either login page with username/password or redirects to the correct IDP, once username was provided


来源:https://stackoverflow.com/questions/26548138/spring-security-different-authentication-methods-depending-on-entity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!