在支持的平台上,您可以使用IdentityServer使用Windows身份验证对用户进行身份验证(例如,针对Active Directory).当前使用以下命令托管IdentityServer时,Windows身份验证可用: Kestrel在Windows上使用IIS和IIS集成包 Windows上的HTTP.sys服务器 在这两种情况下,使用方案"Windows"在HttpContext上使用ChallengeAsync API来触发Windows身份验证.我们的快速入门UI中的帐…
在本快速入门中,我们希望通过OpenID Connect协议向我们的IdentityServer添加对交互式用户身份验证的支持. 一旦到位,我们将创建一个将使用IdentityServer进行身份验证的MVC应用程序. 11.1 添加 IdentityServer 内置了 OpenID Connect 需要的所有协议支持.你需要提供必需的 UI 部分,包括 登录.注销.授权确认以及错误页. 因为在每个 IdentityServer 的实现中,视觉.感觉以及实际工作流可能总是有所不同的,所以我们提…
OAuth 2.0资源所有者密码授权允许客户端向令牌服务发送用户名和密码,并获取代表该用户的访问令牌. 除了无法承载浏览器的旧应用程序之外,规范通常建议不要使用资源所有者密码授予.一般来说,当您要对用户进行身份验证并请求访问令牌时,使用其中一个交互式OpenID Connect流程通常要好得多. 然而,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我们要展示它的原因. 10.1 添加用户 就像基于内存存储的资源(即 范围 Scopes)和客户端一样,对于…
第65章 博客帖子 65.1 团队帖子 65.1.1 2019 IdentityServer中的范围和声明设计 尝试使用IdentityServer4的设备流程 OAuth2中隐含流的状态 另一种保护SPA的方法(使用ASP.NET Core,OpenID Connect,OAuth 2.0和ProxyKit ASP.NET核心中的自动OAuth 2.0令牌管理 加密IdentityServer4中的身份令牌 65.1.2 2018 IdentityServer4更新 IdentityServe…
本快速入门将展示如何构建基于浏览器的JavaScript客户端应用程序(有时称为" SPA "). 用户将登录IdentityServer,使用IdentityServer发出的访问令牌调用We​​b API,并注销IdentityServer.所有这些都将来自浏览器中运行的JavaScript. 14.1 JavaScript客户端的新项目 为JavaScript应用程序创建一个新项目.它可以只是一个空的Web项目,一个空的ASP.NET Core应用程序,或者像Node.js应用程…
IdentityServer由许多nuget包组成. 4.1 IdentityServer4 nuget | github上 包含核心IdentityServer对象模型,服务和中间件.仅包含对内存配置和用户存储的支持 - 但您可以通过配置插入对其他存储的支持.这是其他仓库和程序包相关的内容. 4.2 Quickstart UI github上 包含一个简单的入门UI,包括登录,注销和授权确认页面. 4.3 Access token validation handler nuget | gith…
除了对OpenID Connect和OAuth 2.0的内置支持之外,IdentityServer4还允许添加对其他协议的支持. 您可以将这些附加协议端点添加为中间件或使用例如MVC控制器.在这两种情况下,您都可以访问ASP.NET Core DI系统,该系统允许重用我们的内部服务,例如访问客户端定义或密钥材料. 可以在此处找到添加WS-Federation支持的示例. 44.1 典型认证工作流程 身份验证请求通常如下所示: 身份验证请求到达协议端点 协议端点执行输入验证 重定向到登录页面,返回…
此类为身份资源建模. Enabled 指示此资源是否已启用且可以请求.默认为true. Name 标识资源的唯一名称.这是客户端将用于授权请求中的scope参数的值. DisplayName 该值将用于例如同意屏幕上. Description 该值将用于例如同意屏幕上. Required 指定用户是否可以在同意屏幕上取消选择范围(如果同意屏幕要实现此类功能).默认为false. Emphasize 指定同意屏幕是否会强调此范围(如果同意屏幕要实现此功能).将此设置用于敏感或重要范围.默认为fal…
IIdentityServerInteractionService接口旨在提供用户界面用于与IdentityServer通信的服务,主要与用户交互有关.它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中. 59.1 IIdentityServerInteractionService APIs GetAuthorizationContextAsync 基于传递给登录或同意页面的returnUrl返回AuthorizationRequest.…
IdentityServer实现以下规范: 3.1 OpenID Connect OpenID Connect Core 1.0 (规范) OpenID Connect Discovery 1.0 (规范) OpenID Connect Session Management 1.0 - draft 28 (规范) OpenID Connect Front-Channel Logout 1.0 - draft 02 (规范) OpenID Connect Back-Channel Logout 1…
欢迎来到IdentityServer4 第一部分 简介 第1章 背景 第2章 术语 第3章 支持和规范 第4章 打包和构建 第5章 支持和咨询选项 第6章 演示服务器和测试 第7章 贡献 第二部分 快速入门 第8章 概述 第9章 使用客户端凭据保护API 第10章 使用密码保护API 第11章 使用OpenID Connect添加用户身份验证 第12章 添加对外部认证的支持 第13章 切换到混合流并添加API访问 第14章 添加JavaScript客户端 第15章 使用EntityFramewo…
IdentityServer依赖于几个加密机制来完成它的工作. 33.1 令牌签名和验证 IdentityServer需要非对称密钥对来签署和验证JWT.此密钥对可以是证书/私钥组合或原始RSA密钥.无论如何,它必须支持带有SHA256的RSA. 加载签名密钥和相应的验证部分是通过实现ISigningCredentialStore和IValidationKeysStore来完成的.如果要自定义加载密钥,可以实现这些接口并将其注册到DI. DI构建器扩展有几种方便的方法来设置签名和验证密钥 - 请…
当用户注销 IdentityServer并且他们使用外部身份提供程序登录时,可能会将其重定向到注销外部提供程序.并非所有外部提供商都支持注销,因为它取决于它们支持的协议和功能. 要检测是否必须将用户重定向到外部身份提供程序以进行注销通常是通过使用idp在IdentityServer中发布到cookie中的声明来完成的.设置到此声明中的值是AuthenticationScheme相应的身份验证中间件.在签出时,咨询此声明以了解是否需要外部签出. 由于正常注销工作流程已经需要清理和状态管理,因此将用…
ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行ASP.NET Identity 快速入门. 22.1 为外部提供者添加身份验证处理程序 与外部提供者通信所需的协议实现封装在身份验证处理程序中.一些提供商使用专有协议(例如Facebook等社交提供商),有些提供商使用标准协议,例如OpenID Connect,WS-Federation或SAML…
规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAuth 2.0协议. 对于相同的角色,不同的文献将使用不同的术语 -- 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider),授权服务器(Authorization Server),IP-STS 等. 但它们完全相同:一种向客户…
第66章 视频 66.1 2019 January [NDC] - 使用ASP.NET Core 2.2和3.0保护Web应用程序和API 1月[NDC] - 为基于OpenID Connect / OAuth 2的系统构建客户端 66.2 2018 26/09 [DevConf] - 现代应用程序的授权 17/01 [NDC伦敦] - ASP.NET Core v2上的IdentityServer v2 - 一个更新 17/01 [NDC London] - 实施Web应用程序和API授权(又…
以下是一些在线,远程和课堂培训选项,以了解有关ASP.NET Core Identity和IdentityServer4的更多信息. 64.1 现代应用程序的身份和访问控制(使用ASP.NET Core 2和IdentityServer4) 这是我们为期三天的旗舰课程(包括广泛的实践实验室),我们作为会议,现场和远程的一部分提供. 可在此处找到公共培训的议程和日期,请联系我们参加私人研讨会. 64.2 PluralSight课程 PluralSight有一些关于身份,ASP.NET Core和I…
提供了基于ASP.NET身份的实现,用于管理IdentityServer用户的身份数据库.此实现是IdentityServer中的扩展点,以便为用户加载身份数据以将声明发送到令牌. 这个支持的仓储位于此处,NuGet包就在这里. 要使用此库,请正常配置ASP.NET Identity.然后在调用AddIdentityServer后使用AddAspNetIdentity扩展方法: public void ConfigureServices(IServiceCollection services)…
为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer. 21.1 Cookie身份验证 使用由ASP.NET Core中的cookie身份验证处理程序管理的cookie来跟踪身份验证. IdentityServer注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时外部cookie).默认情况下使用它们,如果要手动引用它们,可以从IdentityServerConstants类(DefaultCookieAuthenticationS…
IdentityServer组织不维护这些示例.IdentityServer组织愉快地链接到社区模板,但不能对模板做出任何保证.请直接与作者联系. 17.1 各种ASP.NET核心安全样本 https://github.com/leastprivilege/AspNetCoreSecuritySamples 17.2 IdentityServer4 EF和ASP.NET Identity 此示例结合了EF和ASP.NET Identity快速入门(#6和#8). 17.3 共同托管Identit…
注意 对于任何先决条件(例如模板),首先要查看概述. IdentityServer旨在提供灵活性,其中一部分允许您为用户及其数据(包括账户密码)使用所需的任何数据库.如果您从新的用户数据库开始,那么ASP.NET Identity是您可以选择的一个选项.本快速入门显示了如何在IdentityServer中使用ASP.NET Identity. 本快速入门使用ASP.NET Identity的方法是为IdentityServer Host创建一个新项目.这个新项目将取代我们在之前的快速入门中构建的…
在之前的快速入门中,我们探讨了API访问和用户身份验证.现在我们想把这两个部分放在一起. OpenID Connect和OAuth 2.0组合的优点在于,您可以使用单个协议和使用令牌服务进行单次交换来实现这两者. 在之前的快速入门中,我们使用了OpenID Connect隐式流程.在隐式流程中,所有令牌都通过浏览器传输,这对于身份令牌来说是完全正确的.现在我们还想要一个访问令牌. 访问令牌比身份令牌更敏感,如果不需要,我们不希望将它们暴露给"外部"世界.OpenID Connect包含…
快速入门介绍了使用IdentityServer保护API的最基本方案. 我们将定义一个API和一个想要访问它的客户端. 客户端将通过提供ClientCredentials在IdentityServer请求访问令牌,ClientCredentials充当客户端和IdentityServer都知道的秘密,并且它将使用该令牌来访问API. 9.1设置ASP.NET核心应用程序 首先为应用程序创建一个目录 - 然后使用我们的模板创建一个包含基本IdentityServer设置的ASP.NET Core应…
IssuerUri 设置将在发现文档和已颁发的JWT令牌中显示的颁发者名称.建议不要设置此属性,该属性从客户端使用的主机名中推断颁发者名称. PublicOrigin 此服务器实例的来源,例如https://myorigin.com.如果未设置,则从请求推断出原始名称. 61.1 端点(Endpoints) 允许启用/禁用各个端点,例如令牌,授权,用户信息等. 默认情况下,所有端点都已启用,但您可以通过禁用不需要的端点来锁定服务器. 61.2 发现(Discovery) 允许启用/禁用发现文档的…
IdentityServer通常在创建令牌或处理对userinfo或内省端点的请求时需要有关用户的身份信息.默认情况下,IdentityServer仅具有身份验证cookie中的声明,以便为此身份数据进行绘制. 将用户所需的所有可能声明放入cookie中是不切实际的,因此IdentityServer定义了一个可扩展点,允许根据用户需要动态加载声明.这个可扩展点是IProfileService开发人员通常可以实现此接口来访问包含用户身份数据的自定义数据库或API. 58.1 IProfileSer…
该Client模型的OpenID Connect或OAuth 2.0 客户端-例如,本地应用,Web应用程序或基于JS的应用程序. 56.1 Basics Enabled 指定是否启用客户端.默认为true. ClientId 客户端的唯一ID ClientSecrets 客户端机密列表 - 访问令牌端点的凭据. RequireClientSecret 指定此客户端是否需要密钥才能从令牌端点请求令牌(默认为true) AllowedGrantTypes 指定允许客户端使用的授权类型.使用Gran…
该GrantValidationResult类模型补助确认为扩展授权和资源所有者密码授权的结果. 最常见的用法是使用身份验证(成功用例): context.Result = new GrantValidationResult( subject: "818727", authenticationMethod: "custom", claims: optionalClaims); ...或使用错误和描述(失败用例): context.Result = new Grant…
此类建模API资源. Enabled 指示此资源是否已启用且可以请求.默认为true. Name API的唯一名称.此值用于内省身份验证,并将添加到传出访问令牌的受众. DisplayName 该值可以在例如同意屏幕上使用. Description 该值可以在例如同意屏幕上使用. ApiSecrets API密钥用于内省端点.API可以使用API​​名称和密钥进行内省验证. UserClaims 应包含在访问令牌中的关联用户声明类型的列表. Scopes API必须至少有一个范围.每个范围可以有…
结束会话端点可用于触发单点注销(请参阅规范). 要使用结束会话端点,客户端应用程序会将用户的浏览器重定向到结束会话URL.用户在会话期间通过浏览器登录的所有应用程序都可以参与注销. 注意 终端会话端点的URL可通过发现端点(discovery endpoint)获得. 53.1 Parameters id_token_hint 当用户被重定向到端点时,系统会提示他们是否真的想要注销.发送从身份验证收到的原始id_token的客户端可以绕过此提示.这是作为查询的字符串参数传递的id_token_h…
内省端点是RFC 7662的实现. 它可用于验证引用令牌(如果消费者不支持适当的JWT或加密库,则可以使用JWT).内省端点需要身份验证 - 因为内省端点的客户端是API,您可以在其上配置秘密ApiResource. 示例 POST /connect/introspect Authorization: Basic xxxyyy token=<token> 成功的响应将返回状态代码200以及活动或非活动令牌: { "active": true, "sub"…