标签: single-sign-on

单页应用程序:使用 OAuth2 授予授权码

我正在关注教程Spring Boot 和 OAuth2。当前端和后端位于不同的服务器上时,我需要对基于服务器的 OAuth2 流程有所了解。

根据教程后端提供 /login/facebook 端点,它基本上重定向到 facebook 和授权后 - 返回重定向 url。当前端是后端部署的一部分时,它工作正常。但是,当我将前端和后端拆分为不同的应用程序时,我遇到了问题,需要洞察正确地做事。

  • 让我们假设 FE 是 localhost:3000 和 my-super-duper-site.com
  • 让我们假设 BE 是 localhost:8080 并且对公众不可见
  • 假设 FE 使用 angular2,BE 使用 spring boot

这是我现在看到/完成的方式:

  1. 用户打开 fronend 并导航到那里的登录页面
  2. 有一个链接可以通过 facebook 授权。看起来它实际上应该指向后端 /login/facebook url,但后端不会对公众可见,所以我向 FE 添加了一个代理,它将 FE 登录 url 转换为引擎盖下的 BE 登录 url。那是对的吗?
  3. 一旦后端登录端点命中 - 它会将用户重定向到用户授权我的应用程序的授权服务器,并且应该将用户重定向到带有令牌的重定向 URL,对吗?
  4. 在我的情况下,重定向 url 应该是一个 FE 页面,只是因为后端对公众不可见。因此,看起来我在 FE 端获得了令牌,并且应该将令牌放入每个 FE->BE 请求中。这是它应该如何工作的方式吗?
  5. 重定向到 FE 还会导致单页应用程序重新加载自身,我认为没有办法避免这种情况。
  6. 最后一个问题是:如果用户未通过身份验证并导航到 url,例如 /myapp/order?id=1 我希望向用户显示登录对话框,一旦获得授权,我希望用户被重定向回到 /myapp/order?id=1。是否可以?

我知道有客户端流程,但我不想对客户端保密(你好逆向工程),这就是创建服务器流程的目的。

authorization single-sign-on oauth-2.0 spring-security-oauth2 angular

5
推荐指数
1
解决办法
746
查看次数

JWT 令牌 SSO 流程

我有一个关于 JWT 的 SSO 流程的简单问题

假设我们有单独的授权服务器,它为客户端应用程序/服务器和资源服务器提供 JWT,客户端尝试使用该令牌进行访问。

在此处输入图片说明

问题是,资源服务器应该自己验证令牌(例如,与身份验证服务器共享私有证书)还是应该请求身份验证服务器为每个客户端请求验证 JWT?

security single-sign-on jwt

5
推荐指数
1
解决办法
1283
查看次数

Azure B2C 是否在多个应用程序之间提供“真正的”单点登录

我目前正在试验 Azure B2C 并创建了一个租户,该租户充当单个身份服务器,其中注册了 2 个应用程序(在不同的域上)。

Azure的B2C文件表明,为支持“单点登录(SSO)跨多个应用程序的行为。”

该文档给出了以下示例:“一旦用户登录 Contoso Shopping 应用程序,他或她还可以在访问它时无缝登录另一个应用程序 Contoso Pharmacy。”

在研究单点登录的含义时,我在 StackExchange上遇到了一个问题,其中的答案描述了“单点登录”一词的两种含义:

(1) 用户只需在每个会话中提供一次凭据,然后在该会话期间无需再次登录即可访问多项服务。但有时它被用来表示

(2) 仅仅为多个服务使用相同的凭证;用户可能需要多次登录,但始终使用相同的凭据。

谁能告诉我这两种含义中的哪一种适用于 Azure B2C?它是否提供/支持“真正的单点登录”?

在此先感谢您的帮助

azure single-sign-on azure-ad-b2c

5
推荐指数
1
解决办法
1835
查看次数

检查 Windows 身份验证是否可用于 JavaScript

有没有办法检查 Windows 身份验证(协商、Kerberos、NTLM...)在浏览器中是否可用(使用 JavaScript 或其他方法),如果不可用,浏览器不会提示输入用户名和密码?

背景

我们正在开发 Angular2 SPA 企业应用程序,并且希望在可用时使用 Windows 身份验证进行 SSO(用户从加入域的计算机访问应用程序),并在不可用时优雅地故障转移到基于表单的身份验证(从 Internet 或非访问)加入域的计算机)。

设置

在服务器端拥有受 Windows 身份验证保护的资源(即 REST 方法)。当您使用 JavaScript 调用此 REST 方法时,将会发生以下两种情况之一:

  1. 如果 Windows 身份验证可用,将调用方法并且您将收到 200 OK 响应
  2. 如果 Windows 身份验证不可用,将返回 401 Unathorized,并将 WWW-Authenticate 标头设置为 Negotiate,这将导致浏览器(至少是 IE,未在其他浏览器中测试,但无论使用什么浏览器都需要能够检测到这一点)显示登录迅速的

问题

显示登录提示是不受欢迎的,我们希望优雅地退回到基于表单的登录。

一些解决方案建议从响应中删除 WWW-Authenticate 标头,但这将阻止 Windows 身份验证工作,因为此步骤是 broser-server 协商身份验证协议的一部分。如果删除,浏览器将永远不会发送 NTLM 或 Kerberos 令牌。

我们控制前端和后端,因此可以修改任一后端以使其正常工作。此外,没有 CORS,一切都是来自单个域的服务器。

任何能够从客户端检测 Windows 身份验证是否可用的方法对我们来说就足够了。到目前为止我发现的是这个,但它仅适用于 IE,并且需要启用 ActiveX。 这个问题有些相关,但也没有解决方案,而且已经很老了。

javascript authentication windows-authentication single-sign-on angular

5
推荐指数
1
解决办法
2620
查看次数

角度CAS认证

我正在构建一个仪表板,旨在简化多个业务应用程序的使用。仪表板的主要工作是从这些应用程序中获取数据并将它们发送回经过身份验证的用户。仪表板分为使用框架 CakePHP3 编写的 API 和一个只执行 HTTP 请求的客户端(尚未编写,但计划在 angular(2+) 中)。

流程示例:我登录仪表板,它告诉我应用程序 A 中有 5 封未读电子邮件,应用程序 B 中有 3 个通知,应用程序 C 中有 5 个新文档。对于收到的每个数据,我有一个直接链接来访问目标业务应用程序中的这些数据。

为此,所有业务应用程序都被cassified(CAS客户端),仪表板充当代理CAS(经过身份验证的用户的身份被传输到cassified应用程序)。

这是一个架构图来解释我们的目标

我编写了一个 CakePHP3 插件来对 CAS 服务器进行身份验证。该插件很简单,如果我没有 CAS 会话(通过 phpCAS),它会将我重定向到 CAS。

在我的后端,我有一个端点允许我对业务应用程序进行代理请求,我们称之为 :(/api/business/:id其中 :id 是应用程序的 ID)。这是我当前使用 phpCAS 执行此代理请求的代码:

if (!phpCAS::isAuthenticated()) {
    throw new ForbiddenException('You need to be authenticated to the CAS server.');
}
$this->service = phpCAS::getProxiedService(PHPCAS_PROXIED_SERVICE_HTTP_GET);
$this->service->setUrl($this->url);
try {
    $this->service->send();
    $this->responseCode = $this->service->getResponseStatusCode();
    $this->responseBody = $this->service->getResponseBody();
} 
// willingly removed, not useful in this example
catch () …
Run Code Online (Sandbox Code Playgroud)

cas cakephp single-sign-on jwt angular

5
推荐指数
0
解决办法
2697
查看次数

“使用 Slack 登录”每次都不断提示用户授予权限

我正在为我的网站进行 Slack 集成,包括允许用户使用“使用 Slack 登录”按钮登录。理想情况下,我希望它只要求用户授予identity.*一次权限,然后下一次当他们单击“使用 Slack 登录”时,授权屏幕应该只闪烁然后重定向到下一步(例如使用 Facebook),但它会保持显示授权屏幕,用户必须单击“继续”按钮一次又一次地授予权限。这对我们的用户来说很不方便。有没有办法让它像Facebook一样只提示一次?仅供参考,我的应用程序尚未公开分发到应用程序目录,这可能是原因吗?

single-sign-on slack-api slack

5
推荐指数
1
解决办法
3307
查看次数

SAMLException: Response has invalid status code status message is null

Im trying to implement spring-securtiy-saml integration as a SP with an adfs system, and im bumping my head for some days now with this exception happening when SAMLResponnse is sent back from the ADFS after successful authentication and the following exception is thrown. this is the DEBUG log:

2017-10-02 18:05:09,246 - DEBUG [http-apr-443-exec-9] BaseMessageEncoder - Successfully encoded message.
2017-10-02 18:05:09,246 - INFO  [http-apr-443-exec-9] SAMLDefaultLogger - AuthNRequest;SUCCESS;208.95.100.30;saml2.glassboxdigital.com;http://this/is/a/valid/url;;;
2017-10-02 18:05:09,859 - DEBUG [http-apr-443-exec-3] SAMLProcessingFilter - Request is to process authentication
2017-10-02 18:05:09,860 …
Run Code Online (Sandbox Code Playgroud)

spring-security single-sign-on opensaml saml-2.0 spring-saml

5
推荐指数
1
解决办法
1万
查看次数

如何为 Azure AD B2C 配置 SSO?

根据Azure AD B2C 文档,我们可以为 Azure AD B2C 应用程序配置 SSO。我们希望我们的用户对应用程序进行自我注册,因此选择了 AD B2C。

但是在创建 B2C 租户帐户并配置所有策略之后。我找不到配置 SSO 的选项。自 2017 年 11 月 30 日之后,Active Directory 将仅在新门户中可用。请提供参考wrt新门户。

在 B2C 中配置 2 个应用程序后的图像. 任何帮助将不胜感激。

提前致谢。

azure single-sign-on azure-ad-b2c

5
推荐指数
1
解决办法
5797
查看次数

带有 CAS 的 Angular 5 微服务 sso

我正在同时开发一个前端 Angular (v5.1.1) 应用程序以及一个单独的 Spring Boot Rest API。至于安全性,其余 api 设置为为 get 和 post 方法颁发和验证不记名令牌,并最终驻留在 aws 服务器上。

此应用程序适用的公司(学校)有一个单独的 CAS 服务器和用于登录的门户。我希望前端应用程序重定向到公司的 CAS 服务器登录页面,用户将在其中提供他/她的 SSO CAS 凭据,然后重定向将它们返回到前端应用程序。我过去曾使用过专门为 Spring Boot 设计的插件来完成此任务(即Kakawait。我搜索了一个示例解决方案,该解决方案将现代Angular应用程序与仅用于 SSO 的 CAS 连接,并且没有自定义登录页面、管理服务器等

我的问题是如何快速实现充当 CAS 客户端的 Angular 应用程序?

cas single-sign-on angular

5
推荐指数
0
解决办法
885
查看次数

SPA 中的 OIDC 会话管理(单点退出)

我目前正在使用 OIDC 在多个应用程序上实施 SSO。我不确定如何在单页应用程序 (SPA) 中处理单点注销以进行基于令牌的身份验证。

考虑两个应用程序。应用 A 是使用 OAuth2 授权代码流的标准 Spring MVC 应用,应用 B 是使用隐式流的 SPA。如果用户已登录应用程序 A,则当他们导航到应用程序 B 时,他们会通过 SSO 自动登录,这是意料之中的。但是,如果用户退出应用程序 A 然后导航到应用程序 B,当前应用程序 B 仍会加载并允许访问 apis,因为它具有存储在浏览器本地存储中的有效 OAuth2 访问令牌。我希望应用程序 B 在提出任何其他请求之前要求用户重新进行身份验证。

在 SPA 中进行单点注销的推荐方法是什么,因为无法让身份提供者向服务器端点发送“注销”请求?

我想到的几个可能的解决方案是:

  1. 创建必须随每个请求重新生成的一次性访问令牌。
  2. 每当应用程序 B 想要向我们的 api 发出请求时,检查活动的 IDP 会话。

我对使用这两种解决方案中的任何一种都犹豫不决,因为它们需要在用户与应用程序交互时向 IDP 发出额外请求。有没有其他策略可以解决这个问题?

编辑

感谢 sdoxsee 的回答,这使我们需要更多的澄清。我应该提到退出应用程序 A 或应用程序 B 也会使用户退出 IDP 会话。但是,由于应用程序 B 在浏览器本地存储中具有有效的访问令牌,因此当用户导航到应用程序 B 时,尽管没有活动的 IDP 会话,他们仍将“登录”到应用程序 B。希望这能提供更多说明。

single-sign-on oauth-2.0 single-page-application openid-connect

5
推荐指数
1
解决办法
1353
查看次数