首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP + ADFS用于SSO (通过OAuth) -如何设置ADFS?

PHP + ADFS用于SSO (通过OAuth) -如何设置ADFS?
EN

Stack Overflow用户
提问于 2016-10-11 04:09:51
回答 1查看 4.7K关注 0票数 6

我试图在一个项目中使用ADFS作为SSO。这个项目是在PHP上进行的,我试图为此使用OAuth

那么,设置ADFS以使用OAuth2的步骤是什么呢?我不知道ADFS,也无法获得任何直接的OAuth2设置指南。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2019-03-18 23:21:45

我知道这个问题很老。但万一其他人来这里,我有一些答案,这应该是好的2019年3月。

让我首先概述一下。

SSO

单点登录可以通过个人Google、Facebook、GitHub、Twitter、Microsoft账户完成。登录到您的帐户后,您可以在没有密码的情况下登录到其他系统(例如WordPress或任何其他系统)(如果其他系统与该身份提供者集成在一起)并表示同意(见下图)。

有些服务的主要重点是提供身份提供者/ SSO功能(例如,Okta、Auth0、、Azure Active、AWS )。

在公司网络中,用户可以基于AD帐户静默登录,而无需通过ADFS输入凭据。

实际上,ADFS支持不同的身份验证协议,如SAML、WS和OAuth。但是现在,服务通常都是在OpenID连接协议的基础上实现OAuth 2.0

OpenID连接流

OpenID连接定义了许多身份验证流。最可取的办法是:

  1. Authorization Code Flow with PKCE (单页应用程序,本机应用程序)

如果使用的是oidc-client-js,则应该使用response_type=code来使用PKCE。

公共本地应用程序客户端必须实现代码交换的验证密钥(PKCE RFC7636) https://www.rfc-editor.org/rfc/rfc8252#section-6 注意:尽管到目前为止,PKCE被推荐为一种保护本地应用程序的机制,但这个建议适用于所有类型的OAuth客户端,包括web应用程序。 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-12#section-3.1.1

  1. Implicit flow被认为是不推荐的

客户端不应使用隐式授予和任何其他响应类型,从而导致授权服务器在授权响应中发出访问令牌。 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-09

  1. Client credentials flow。服务对服务的交流。

如何配置ADFS?

您可以在Microsoft Docs:带有ADFS的本地客户端上找到包含“本地应用场景”插图的相当详细的文档。

如果不使用ADFS,则可以在游乐场中使用PKCE流设置。

JavaScript前端

从不将客户端机密存储在公共应用程序中,比如JS前端应用程序或移动应用程序。它不适用于PKCE流,但只是以防万一。

如果您有一个现代的SPA应用程序(例如角或反应),这意味着前端应该只有client_id,以便最终用户能够通过ADFS在浏览器中获得JWT access_token。你不需要任何client_secret

oidc-客户端js可以帮你。确保code_verifier与令牌请求一起发送(这意味着您使用的是更安全的PKCE流)。

PHP后端

在PHP方面,您需要验证访问令牌。根据那篇文章,您可以自己实现工作流。但是最好使用OpenID认证的库,您可以在这个页面上找到这个库(不仅仅用于PHP):https://openid.net/developers/certified/

因此,对于PHP,只有一个:phpOIDC

Authentication

OAuth 2.0只能帮助您进行身份验证(识别用户身份)。

很可能您希望对不同的用户具有不同的权限。ADFS中的OpenID连接实现提供了将AD组映射到令牌声明的能力。因此,您可以在后端解码JWT访问令牌并实现基于声明的授权。

要使用JWT声明,请确保正确验证令牌和发行者的真实性:

  • 使用公钥验证JWT签名
  • 检查issuer是否有合适的发行者(身份提供者)
  • 检查aud (受众)以获得适当的客户端ID
  • 检查exp (过期时间戳)
  • 核对索赔
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39970377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档