问题标签 [adfs4.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
531 浏览

asp.net-core - 更改 AspNetCore2 Oauth 重定向处理程序

TL;博士

如何更改 redirect_url 端点的行为?我想处理显然不是 JWT 的 SAML。

所有血腥的细节

你可能见过这样的代码

翻遍 GitHub 提供者的源代码,我们发现这AddGitHub是一个看起来像这样的扩展方法

GitHubAuthenticationDefaults.AuthenticationScheme只是一个值为“GitHub”的字符串常量。如果您想通过多个身份验证端点重用同一提供程序,则必须使用不同的方案名称。

有一系列对签名重载的调用添加参数并在此处结束。

DisplayName 也默认为“GitHub”并且不重要。我们在上面提供的配置。所以实际上我们是AuthenticationBuilder.AddOAuth用两个字符串和我们的配置对象来调用的。

这个调用神奇地创建了一个重定向端点signin-github,它处理 GitHub auth 服务返回的令牌。

显而易见的下一步是克隆 aspnet/Security 存储库,将示例项目链接到它并逐步完成魔法,但它自然而然地针对每个人1拥有的 Core 2.1。

更多的翻找发现了这一点。

这是一个非常多的代码要涉水。谁能告诉我重定向处理程序端点是在哪里以及如何生成的,以及如何为其提供替换行为?

OAuthHandler.cs 的第 89 行看起来很有希望

因为这似乎是将代码交换为令牌的逻辑并且它是可覆盖的,但是很难确定我什么时候不能运行它。


  1. 显然,“每个人”是指 aspnetcore 开发团队中的每个人。
0 投票
1 回答
60 浏览

single-sign-on - 某些用户或 OU 的 AD FS SSO 强制登录

应用程序是否可以仅为特定 AD 组的用户提供 SSO,并强制用户为不在该 AD 组中的用户手动输入其凭据?

0 投票
1 回答
2717 浏览

angular - ADFS 2016 oAuth 在注销后未重定向到登录页面

我在 ADFS 2016 上遇到了一个奇怪的问题。我有一个 Angular 应用程序,它使用 ng2-adal js 来处理应用程序的身份验证和授权。当用户从应用程序注销时,他们不会被重定向回登录页面。我在事件查看器中为 ADFS 启用了调试跟踪,错误是:

OAuthSignoutProtocolHandler.ValidatePostLogoutRedirectUri:验证结果:False。重定向网址:http://localhost:4200/login

指定的重定向 URL 与任何 OAuth 客户端的重定向 URI 都不匹配。注销成功,但客户端不会被重定向。

网址:http://localhost:4200/login

我使用了 ADFS 2016 应用程序组,我的 Native Client 带有这个重定向 URL。如果 URL 不存在,用户将无法首先登录。

任何帮助深表感谢。

0 投票
0 回答
376 浏览

identityserver4 - IdentityServer4注销规范说明

我们正在使用 IdentityServer4。我们有一台运行 ADFS(Active Directory 联合服务)4.0 版的 Windows 2016 服务器。此版本的 ADFS 具有 OpenID Connect 端点来执行活动目录身份验证。我们将其设置为 IdentityServer4 中的外部 oidc 提供程序。身份验证工作正常。我遇到的问题是注销。当前注销会正确处理身份服务器和客户端 cookie,但不会将用户从外部提供程序 (ADFS) 中注销。我升级了 ADFS 服务器,因此元数据端点公开了 end_session_endpoint、frontchannel_logout_supported 和 frontchannel_logout_session_supported 属性。

让我们的 identityserver4 实现也要求外部提供者在执行注销时执行注销的正确方法是什么?我对规范有点困惑。

http://docs.identityserver.io/en/release/topics/signout_external_providers.html

http://docs.identityserver.io/en/release/topics/signout.html#refsignout

我不确定在这种情况下我应该查看的是前通道还是后通道,或者这是否相关。该规范还提到了身份验证时的 idp 值,该值将向身份服务器表明外部提供者也需要注销。这是我应该看的吗?小失落。寻求指导。谢谢!

0 投票
1 回答
4710 浏览

oauth-2.0 - Windows Server 2016 AD FS 4.0 使用 OAUTH JWT 和共享密钥对外部 Web 应用程序进行身份验证

我们正在尝试让 SaaS 产品针对在 Windows Server 2016 上运行的 AD FS 4.0 服务进行身份验证。

Web 应用程序是使用 JWT 为 SSO 设置的,并允许我们设置Shared SecretLogin URLLogout URL

我让应用程序重定向到 AD FS 登录屏幕https://hostname/adfs/oauth2/authorize并针对活动目录进行身份验证。从那里它返回一个我知道需要转到https://hostname//adfs/oauth/token的代码值,但在这里我被卡住了。

我是否需要构建一个 Web 服务,从授权端点接收代码,将其发布到令牌端点,然后使用 JWT 重定向回 Web 应用程序?或者如果我正确配置它,AD FS 可以自己执行此操作吗?

我想要的是让 Web 应用程序重定向到 AD FS 登录屏幕(完成),AD FS 对 AD 进行身份验证(完成),然后(做魔术)并使用 JWT 重定向回 Web 应用程序。

编辑:

以下是我想要的 Server 2016 AD FS 4.0。我需要创建自己的 ADFS/AUTHORIZE->code->ADFS/TOKEN->jwt->Application URL 处理服务吗?

https://support.zendesk.com/hc/en-us/articles/203663816-Setting-up-single-sign-on-with-JWT-JSON-Web-Token-

更新:

看来您必须控制客户端应用程序,而当您使用第 3 方 SaaS 时,情况并非如此。因此我们需要这样实现一个myapi

  1. SaaS 重定向到 /adfs/oauth2/authorize
  2. AD FS 重定向到 /myapi/?code=ab2..3cf
  3. myapi发布code到 /adfs/oauth2/token
  4. AD FS 响应包含 JWT
  5. myapi使用 /?jwt=token 重定向到 SaaS
0 投票
1 回答
101 浏览

active-directory - The right way to handle accounts in AD to have SSO for different applications

How SSO woul work if you have 4 applications which you want to secure them using OpenID Connect token from ADFS?

These 4 applications has no user registery, however they need different claims from IdP (ADFS). Do you need to create 4 different user accounts for each user to be able to log on into all 4 applications?

If you need 4 different user accounts for each user, then do the user need to log-out first from app_1 and log-on on app_2?

I appreciate all kind of advice.

0 投票
1 回答
358 浏览

oauth-2.0 - 如何使用 OAuth2/OpenID Connect 离线访问令牌确定禁用用户?

我们有 AD FS 2016 面向我们的公司 Active Directory 域,用于公共 OAuth2/OpenID Connect 身份验证。我们正在开发一个简单的应用程序,它使用我们的 AD FS 作为 OAuth2/OpenID Connect 身份提供者。

用户通过 OpenID Connect 进行身份验证,然后在第一次使用时我们提供本地用户。在所有身份验证中,我们都存储访问令牌。

有一个后台服务可以根据注册用户的本地配置文件(使用来自 IP 声明的信息进行初始化)向注册用户发送电子邮件和 SMS 通知。使用离线访问令牌,我想根据 IP(我们的 AD FS 服务器)确认用户仍然有效(未禁用)。应用程序网站和后台服务都没有在我们的公司局域网内运行。所有访问都将严格通过 AD FS/OAuth2/OpenID Connect。

是否有使用 OAuth2/OpenID Connect 的标准方法来验证经过身份验证的用户(在访问令牌中表示)是否仍然启用/有效?

实际应用是,如果员工离开公司并且他们的 Active Directory 帐户被禁用,我们不应该向他们发送通知。

0 投票
1 回答
263 浏览

single-sign-on - .NET 4.0 WSFed 应用程序在成功验证后仅在 IE 中继续重定向到 ADFS

使用 ADFS 启用 SSO 后,我的应用程序在 Chrome 和 Firefox 上运行良好。但随着 IE 出现6 次重定向问题。这适用于 IIS Express 中的 IE。

在设置 FedAuth cookie 后,我在 IE 中检查了 Fiddler,发现它会丢失。然后它再次重定向到 ADFS。

提琴手追踪

0 投票
2 回答
791 浏览

asp.net-mvc - 我是否需要使用 Windows 身份联合实用程序来创建可识别声明的 asp.net Web 应用程序?

我按照本页中概述的步骤构建了一个声明感知 asp.net mvc 应用程序:https ://docs.microsoft.com/en-us/dotnet/framework/security/how-to-build-claims-aware-aspnet -mvc-web-app-using-wif。页面中的示例在本地主机上使用 STS,但在我的应用程序中,我指向的是不同服务器上功能齐全的 AD FS。

我正在使用 Framework 4.7 和 Windows Server 2016 来托管 AD FS 并托管 Web 应用程序。

部署应用程序后,我针对它运行了 Windows 身份联合实用程序(因为我认为我需要它将应用程序添加为 AD FS 上的依赖方信任)。此实用程序将大量标记插入到引用 Microsoft.IdentityModel 命名空间的 web.config 中。

然后,我将该应用程序作为依赖方信任添加到 AD FS,并导航到声明感知应用程序。该页面失败,因为示例代码将 STS 返回的声明转换为 System.Security.Claims.Claim。当我将其更改为 Microsoft.IdentityModel.Claims.Claim 时,它运行良好。

我所遵循的示例没有提到 Windows 身份联合实用程序。我需要使用它吗?或者没有它会起作用吗?

当我尝试反转插入站点的实用程序的 web.config 更改时,该站点失败并出现 401 错误(由于凭据无效而拒绝访问),因此显然需要该实用程序插入的内容才能从 AD FS 获得身份验证。这是因为我在将其作为依赖方信任添加到 ADFS 之前在网站上运行了该实用程序吗?

0 投票
1 回答
389 浏览

asp.net - 将从 SQL Server 提取的角色添加为 AD FS 依赖方信任的声明

我正在使用 ADFS Server 2016 被动重定向对 asp.net mvc 网站的用户进行身份验证,但我无法从 SQL 属性存储中获取声明。我有兴趣发现我做错了什么或遗漏了什么。

旁注:我使用的是 Framework 4.5 中的 System.Identity 库(我没有引用为旧框架版本创建的 Microsoft.Identity 库;我偶然发现的大多数 ADFS 代码示例都使用这些旧库)。

基础工作良好。所有这些都在一个域中。我将我的 asp.net web.config 设置为将用户重定向到我的 ADFS 服务器进行身份验证。ADFS 服务器成功地对用户进行身份验证并将用户重定向回我的 asp.net 网站。在 ADFS 上,我有一个声明颁发策略规则,我只需将所有声明从 Active Directory 传回。

在网站上,我可以遍历用户的 Claims 集合并显示它们。这是我在声明中迭代的 *.cshtml 页面中的代码,它工作正常:

除了来自 Active Directory 的这些声明之外,我还想从 SQL Server 数据库中获取一堆角色并将它们作为角色添加到声明集合中。我正在从旧的 asp.net Membership 数据库中获取角色。作为第 1 步,我只想在 SQL 语句中硬编码用户名(最终我需要弄清楚如何将用户名作为参数传递给 SQL 语句,但这将是第 2 步)。

首先,我提供了 ADFS 服务器在我的 SQL Server 上以读/写/执行权限运行的身份(当我取消这些权限时,我得到一个权限错误,这让我确信我的 SQL 语句正在执行)。

在我的 AD FS 中,我通过右键单击“属性存储”节点添加了一个 SQL Server 属性存储,选择“SQL”的属性存储类型,命名为“SQLServer”,并添加了一个连接字符串,如下所示:

然后我选择“Relying Party Trusts”文件夹,选择我感兴趣的信任,然后选择“Edit Claim Issuance Policies”。我有一个有效的规则;它只是传回所有 Active Directory 声明。我可以在我的网页上看到所有这些声明(upn、名称、windowsaccountname、我所有的组 sid 等):

我正在尝试添加第二条自定义规则来读取旧会员数据库。在我的 ADFS 中,我单击“添加规则”、“使用自定义规则发送声明”,并将其添加为规则:

它保存得很好,但是当我重新运行页面时没有任何变化;我仍然得到 Active Directory 声明的原始集合,但没有来自 SQL Server 的数据。

我确信 SQL Server 语句正在执行,因为如果我从 SQL Server 中删除运行 ADFS 的身份的权限,我会收到错误消息,如果我故意弄乱 SQL 语法,我会收到错误消息。如果我扭转这些故意的错误,那么页面会再次正常运行。但我从未在 Claims 集合中看到我想看到的角色。

根据我对自定义规则的理解,“ http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn ”作为参数传递到查询中,这就是我上面有 OR 语句的原因;我的最终目标是将用户的 UPN 作为参数传递给 SQL 查询。

我错过了什么或做错了什么?额外的问题——假设我能正常工作,你能告诉我如何将用户的 UPN 作为参数传递给 SQL 查询吗?