IdentityServer - AD 用于身份验证,其余部分在 DB 中

2024-01-22

我已经设置了一个已启动并运行的基本 IdentityServer。我使用 Identity Manager 和 Identity Admin 将所有内容(用户、角色、声明、客户端、范围)保存在数据库中。下一步是将身份验证与 AD 集成。我的要求是:

  • 用户将根据 AD 进行身份验证
  • 用户权限(声明/角色)将存储在数据库中(就像现在一样)
  • Depending on the client application, I have three different scenarios:
    • 在某些情况下,应该使用当前用户的身份(我想为了实现此目的,Identity Server 应该使用 Windows 身份验证运行)。不应提示用户输入任何内容。
    • 在某些情况下,用户必须显式登录。他可以使用当前登录名或
    • 手动输入将根据 AD 进行验证的用户名和密码。

我正在寻找一些如何继续的指示/方向。我应该自己完全处理登录序列吗?是否有类似的东西可以作为我的解决方案的基础,等等。

任何帮助表示赞赏。


经过一番挖掘后:

这个例子 https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/WebHost%20(Windows%20Auth)/README.mdidsrv 中展示了如何在单独的 Web 应用程序中运行 Windows authn 以及如何使用 ws-fed 委托给该 Web 应用程序。这也解释在这个问题 https://github.com/IdentityServer/IdentityServer2/issues/358.

斯科特·布雷迪的这篇博文 https://www.scottbrady91.com/Identity-Server/Identity-Server-3-using-WS-Federation演示如何配置 adfs 以允许 idsrv 作为依赖方,以及如何使用 ws-fed 委托给 adfs 以允许在 adfs 上使用用户名/密码登录

如果您同时使用这两个 ws-fed 委托,请确保对authenticationtype 使用不同的值。

您可以做的是强制用户首先尝试 winauth,方法是将 acr_values 和 idp 添加到第一个重定向并将 idp 设置为 winauth 外部 idp 的名称。看idsrv 文档在这里 https://identityserver.github.io/Documentation/docsv2/endpoints/authorization.html

如果失败,您可以使用这项技术 https://github.com/IdentityServer/IdentityServer3/issues/2489检测从外部 winauth 提供商登录失败并自动重定向到 adfs 提供商。

如果由于某种原因您确实到达了登录页面,您可以禁用本地登录 https://identityserver.github.io/Documentation/docsv2/configuration/authenticationOptions.html(不显示用户名/密码输入字段)并且外部提供程序(winauth 和 adfs)默认情况下仅显示为按钮。


edit:

是的,您可以在 idsrv 旁边添加一个额外的 Web 应用程序,这样就不必使用 Windows 集成身份验证来运行 idsrv

winauth 用户的流程是

client app -> IdSrv (login page) -> WinAuthHost -> IdSrv (auth endpoint)-> client app

实际上,如果成功,用户很可能只会在 Winauth 主机中看到客户端应用程序和一个屏幕,而永远不会看到 Idsrv

如果用户没有登录Windows(或者不是正确的域),那么流程将是这样的

client app -> IdSrv (login page) -> WinAuthHost ->  IdSrv login (auth endpoint, fails) 
-> ADFS ->  IdSrv login (auth endpoint) -> client app
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IdentityServer - AD 用于身份验证,其余部分在 DB 中 的相关文章

  • 将密钥对添加到现有 EC2 实例

    我被给予AWS控制台访问正在运行 2 个实例的帐户 但我无法关闭 在生产中 但是 我想获得对这些实例的 SSH 访问权限 是否可以创建一个新的密钥对并将其应用到实例 以便我可以通过 SSH 访问 获取现有的pem当前无法选择创建实例所用的密
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 设置密码非常慢

    使用以下方式与活动目录通信时 我们遇到性能问题System DirectoryServices DirectoryEntry Invoke SetPassword new object password 有时需要15秒 进行调用的服务正在同
  • Grails + Spring Security:无法登录

    我刚刚开始学习Grails和Spring 我已经按照官方教程创建了一个登录系统 但我无法登录 用户名或密码不匹配 我知道 90 的情况下这是由于双重编码或多个数据源 这也导致双重编码 造成的 但我也没有这样做 class BootStrap
  • 在 Rails 3 中选择性地关闭 Devise 的 Flash 通知

    Devise 身份验证框架在各处都使用 Flash 通知 这使得与应用程序集成变得很容易 但有时会导致用户体验不佳 我想知道有什么简单的方法可以有选择地关闭 Rails 3 应用程序中的一些 Devise flash 通知 特别是 我想摆脱
  • 存储外部站点(不使用 OAuth)的用户凭据的智能方法是什么?

    我意识到 一般来说 您不应该直接存储用户凭据 即以纯文本形式 相反 最好存储它们的某种加密形式 但是 假设我创建了一个与其他第三方网站交互的网站 假设这个第 3 方站点提供了一个 API 需要用户的凭据 使用该站点 进行身份验证 如果我的目
  • python:API 令牌生成及其危险

    我正在按照 Flask Web Development 一书来实现基于令牌的身份验证 基本上 用户使用 HTTP 基本身份验证对其进行身份验证 并为其生成令牌 s Serializer app config SECRET KEY expir
  • 无法启动活动?

    在添加异步任务之前 我对代码进行了一些更改 我的应用程序可以正常工作 从远程服务器验证用户名和密码 但在登录成功消息消失时无法启动其他活动 有人建议我添加异步任务 现在我已经添加了该任务 但是当我输入正确的用户名和密码时 它会停止工作 当我
  • VB6 获取 Active Directory 域列表

    使用VB6 是否可以获取活动目录中所有可用域的列表 谢谢 亚历克斯 将 ActiveDS 类型库和 ADO 的引用添加到您的项目中 Sub GetDomains Dim objRootDSE As IADs Dim objBase As I
  • 通过 AJP 将 REMOTE_USER 转发到 tomcat(例如用于 shibboleth)

    今天我刚刚遇到了以下问题 1 我将apache配置为基本身份验证 需要有效用户 这有效 2 我进一步配置 apache 将某些路径 在我的例子中为 idp 的请求转发到 tomcat servlet shibboleth IDP 结果是 s
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 通过移动应用程序使用 Moodle 进行身份验证

    我的移动应用程序需要登录 Moodle 以从 Web 服务获取 Json 数据并使用 Angular 显示它 为此 我需要传入用户名和密码并取回 Moodle Web 服务令牌 因此我的应用程序不需要再次登录 至少在令牌过期之前 这是 提出
  • PHP cURL 重定向到本地主机

    我正在尝试使用带有 cURL 的 php 脚本登录外部网页 我是 cURL 的新手 所以我觉得我错过了很多东西 我找到了几个例子并修改了它们以允许访问https页面 最终 我的目标是能够登录页面并在登录后通过指定的链接下载 csv 到目前为
  • 需要将用户名和密码添加到 VB.NET Web 服务客户端中的 SOAP 标头

    我需要查询一个进行基本身份验证的 Web 服务 将用户名和密码放在请求标头中 我的客户端是用 VB NET Visual Basic Express Edition 2010 编写的 我已将 Web 服务添加到服务引用中 它为我自动生成了合
  • 仅从 AD 获取计算机名称

    我是 Power Shell 新手 正在测试一些命令和想法 我坚持认为应该很简单的事情 我想将 AD 中计算机对象的名称提取到文件中 到目前为止我正在尝试的方法是这样的 computers Get ADComputer Filter For
  • 由 aws API 制作的 HttpRequest 拦截器

    我正在开发一个项目 该项目使用 cognito 作为身份验证服务来保护使用 nodeJS 制作的无服务器休息 API 我已成功关闭未经身份验证的客户端的 API 现在 每当我从 Angular 客户端发出请求时 我都需要在标头中自动注入一个
  • CakePHP Auth 组件使用 $this->Auth->login() 时未登录;

    我是 cakePHP 的新手 我已经阅读了他们的文档 并且正在遵循他们的简单身份验证示例 我还广泛搜索 包括本网站上的答案 来寻找我的问题的答案 我正在使用 cakePHP 2 0 我的 UsersController 的登录功能如下所示
  • 根据用户名获取广告详细信息

    我有一个代码可以从 AD 检索用户的详细信息 例如电子邮件地址 电话号码等 我当前使用的代码是 Set objSysInfo CreateObject ADSystemInfo strUser objSysInfo UserName msg
  • Laravel 5 通过外部 API 对用户进行身份验证

    我想知道是否可以扩展内置身份验证以使用外部 API 来对用户进行身份验证 我是 Laravel 新手 非常感谢您的帮助 我正在 Laravel 5 2 中为我的客户制作一个自定义应用程序 但我无法直接访问他们的数据库服务器 我只能调用他们的
  • 从 Spark 访问 Hdfs 会出现令牌缓存错误 Can't get Master Kerberosprincipal for use as renewer

    我正在尝试运行测试 Spark 脚本 以便将 Spark 连接到 hadoop 脚本如下 from pyspark import SparkContext sc SparkContext local Simple App file sc t

随机推荐

  • Krakenex API 多对查询

    我正在尝试使用 Krakenex python 库一次查询多个货币对的订单簿 当我对单一货币执行此操作时 这是有效的 如下所示 con krakenex API con load key kraken key con query publi
  • 创建一个处理 DatabaseFactory 的 DbContext 以更轻松地使用 DapperExtensions

    这几天我尝试使用一些基本的 CRUD 函数创建一个抽象的基础存储库简洁的扩展 https github com tmsmith Dapper Extensions 但作为示例给出的代码使用 SqlConnection 来连接到 SQL Se
  • .NET Core 项目与 .NET Framework 中为 System.Data.DataTable 生成的 JSON 的变化

    下面的程序在 NET Core 项目与 NET Framework 应用程序中运行时生成不同的 JSON Code class Program internal static readonly MediaTypeFormatter Defa
  • openlayers3如何始终启用徒手绘制

    在 OpenLayers3 v3 5 中 如何始终启用徒手绘制 默认启用徒手绘制是通过freehandCondition的财产ol interaction Draw 当前默认设置为 Shift 键 draw new ol interacti
  • “致命错误:无法找到本地 grunt。”在 Windows 7 上

    我根本无法让 grunt 在 Windows 7 上工作 按照 Grunt 网站上的说明进行操作 http gruntjs com getting started http gruntjs com getting started 我已经跑了
  • 如何合并多个 PDB 文件?

    我们目前正在使用单个命令行工具在 Windows 和 Linux 上构建我们的产品 到目前为止 它工作得很好 允许我们从源代码构建 并且具有比我们之前的任何构建系统所允许的更精细的依赖关系 这为我们带来了强大的增量和并行构建能力 为了简要描
  • 如何在Excel应用程序中使用javascript打开Excel html文件

    如何使用javascript或jQuery从浏览器中打开excel中的html文件 我一直在尝试仅使用 window open href 打开 html excel 文件 它在服务器上的位置是 server excelfiles myexc
  • 理解列表推导式的语法

    我不明白列表理解的语法 newList expression element for element in oldList if condition 我不明白的是 element 假设您有以下代码 List character for ch
  • Monotouch:UITableViewCell 高度

    我一直在网上冲浪以弄清楚如何使我的表格单元格高度适合其内容 我的内容具有不同的高度 我试着看看这个样本 http simon nureality ca simon says project d uitableviewcells autosi
  • 如何制作响应式表格[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个表来表示 html 页面中的一些数据 我正在尝试使该表具有响应能力 我怎样才能做到这一点 这里是Demo http jsfid
  • 如何在Android中的DatePicker中仅阻止过去的日期

    如何在Android中的DatePicker中仅阻止过去的日期 我正在使用过去日期和当前日期被阻止的示例代码 我只需要阻止过去的日期 而不是当前日期 这是我的代码 private DatePickerDialog OnDateSetList
  • 向 React Native WebView 添加 CSS 样式

    所以我对此有点困惑 我在应用程序的一部分中使用了 WebView 使用 WebView 的原因是因为我们从返回给我们 HTML 字符串的 API 端点拉取 此 HTML 字符串中的字体大小和其他内容的样式不是为了在移动应用程序中使用而设计的
  • 即使使用 TLSHandshakeTimeShift 选项,TLS 过期的 Hyperledger Fabric orderer 也无法启动

    我的 Hyperledger Fabric 网络的 TLS MSP 密钥已在 500 多小时前过期 由于过期 我的订单在停止后无法重新启动 我的订购者设置是 超级账本 Fabric 版本 2 2 RAFT共识 根据文档 我设置了TLSHan
  • WebElement.equals() 方法如何检查相等性?

    我有超过 1 个 XPath 指向一个 Web 元素 并且我想确定这两个元素是否等效 即 如果我在两个 Web 元素上执行操作 sendKeys 或 click 则该操作将在同一个 Web 元素上执行 目前我正在使用以下方法检查相等性 We
  • 重定向到带有 auth 标头的 url

    我正在尝试重定向到受保护的资源 当我按下登录按钮时 它会发送到我未受保护的登录 api 并返回一个令牌 其他路由期望标头 授权 不记名令牌 类型的交易 但我不知道当我重定向到受保护资源时如何设置标头 console log success
  • TFS 2018 以编程方式创建代理池

    是否可以以编程方式 最好通过 PowerShell 在 TFS 2018 中创建代理池 我在 REST API 中找不到类似的东西 我不知道为什么它没有详细记录 但这对我来说对 VSTS 有效 token myPAT base64AuthI
  • 获取 UITextView 中滚动后可见文本的 NSRange

    我正在尝试将滚动文本的位置保存在UITextView这样我就可以在加载时返回到该位置ViewController再次 我有很长的字符串 所以我希望用户能够滚动到特定位置 然后稍后返回到该位置 我正在使用UITextView scrollRa
  • 有没有办法让 json.Unmarshal() 根据“type”属性选择结构类型?

    我有一些以下形式的 JSON type car color red hp 85 doors 4 type plane color blue engines 3 我有类型car and plane满足车辆接口 我希望能够写 var v veh
  • 如何在开始其他活动时保留 Tabhost

    我的 TabHost 有问题 我的 TabBarActivity 类流程为 公共类 TabBarActivity 扩展 TabActivity 实现 OnTabChangeListener non Javadoc see android a
  • IdentityServer - AD 用于身份验证,其余部分在 DB 中

    我已经设置了一个已启动并运行的基本 IdentityServer 我使用 Identity Manager 和 Identity Admin 将所有内容 用户 角色 声明 客户端 范围 保存在数据库中 下一步是将身份验证与 AD 集成 我的