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…
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…
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 典型认证工作流程 身份验证请求通常如下所示: 身份验证请求到达协议端点 协议端点执行输入验证 重定向到登录页面,返回…
在支持的平台上,您可以使用IdentityServer使用Windows身份验证对用户进行身份验证(例如,针对Active Directory).当前使用以下命令托管IdentityServer时,Windows身份验证可用: Kestrel在Windows上使用IIS和IIS集成包 Windows上的HTTP.sys服务器 在这两种情况下,使用方案"Windows"在HttpContext上使用ChallengeAsync API来触发Windows身份验证.我们的快速入门UI中的帐…
本快速入门将展示如何构建基于浏览器的JavaScript客户端应用程序(有时称为" SPA "). 用户将登录IdentityServer,使用IdentityServer发出的访问令牌调用We​​b API,并注销IdentityServer.所有这些都将来自浏览器中运行的JavaScript. 14.1 JavaScript客户端的新项目 为JavaScript应用程序创建一个新项目.它可以只是一个空的Web项目,一个空的ASP.NET Core应用程序,或者像Node.js应用程…
IIdentityServerInteractionService接口旨在提供用户界面用于与IdentityServer通信的服务,主要与用户交互有关.它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中. 59.1 IIdentityServerInteractionService APIs GetAuthorizationContextAsync 基于传递给登录或同意页面的returnUrl返回AuthorizationRequest.…
欢迎来到IdentityServer4 第一部分 简介 第1章 背景 第2章 术语 第3章 支持和规范 第4章 打包和构建 第5章 支持和咨询选项 第6章 演示服务器和测试 第7章 贡献 第二部分 快速入门 第8章 概述 第9章 使用客户端凭据保护API 第10章 使用密码保护API 第11章 使用OpenID Connect添加用户身份验证 第12章 添加对外部认证的支持 第13章 切换到混合流并添加API访问 第14章 添加JavaScript客户端 第15章 使用EntityFramewo…
为IdentityServer中的配置和操作数据扩展点提供了基于EntityFramework的实现.EntityFramework的使用允许任何EF支持的数据库与此库一起使用. 这个库的仓库位于这里,NuGet包就在这里. 此库提供的功能分为两个主要区域:配置存储和操作存储支持.根据托管应用程序的需要,这两个不同的区域可以独立使用或一起使用. 62.1 配置存储支持客户端,资源和CORS设置 如果希望从EF支持的数据库加载客户端,标识资源,API资源或CORS数据(而不是使用内存配置),则可以…
IdentityServer旨在实现可扩展性,其中一个可扩展点是用于IdentityServer所需数据的存储机制.本快速入门展示了如何配置IdentityServer以使用EntityFramework Core(EF)作为此数据的存储机制(而不是使用我们迄今为止使用的内存中实现). 注意 除了手动配置EF支持外,还有一个IdentityServer模板可用于创建具有EF支持的新项目.使用创建它.有关更多信息,请参见此处dotnet new is4ef 15.1 IdentityServer4…
您通常在系统中定义的第一件事是您要保护的资源.这可能是您的用户的身份信息,如个人资料数据或电子邮件地址,或访问API. 注意 您可以使用C#对象模型定义资源 - 或从数据存储加载它们.IResourceStore的一个实现处理这些低级细节.对于本文档,我们使用内存实现. 19.1 定义身份资源 身份资源是用户的用户ID,名称或电子邮件地址等数据.标识资源具有唯一名称,您可以为其分配任意声明类型.然后,这些声明将包含在用户的身份令牌中.客户端将使用该scope参数来请求访问标识资源. OpenID…
客户端表示可以从您的身份服务器请求令牌的应用程序. 详细信息各不相同,但您通常会为客户端定义以下常用设置: 唯一的客户ID 如果需要的秘密 允许与令牌服务的交互(称为授权类型) 身份和/或访问令牌发送到的网络位置(称为重定向URI) 允许客户端访问的范围列表(也称为资源) 注意 在运行时,通过实现来检索客户端IClientStore.这允许从任意数据源(如配置文件或数据库)加载它们.对于本文档,我们将使用客户端存储的内存版本.您可以通过ConfigureServices的AddInMemoryC…
IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ConfigureServices(IServiceCollection services) { var builder = services.AddIdentityServer(); } 您可以选择将选项传入此调用.有关选项的详细信息,请参见此 这将返回一个构建器对象,该构建器对象又有许多方便的方…
提供了基于ASP.NET身份的实现,用于管理IdentityServer用户的身份数据库.此实现是IdentityServer中的扩展点,以便为用户加载身份数据以将声明发送到令牌. 这个支持的仓储位于此处,NuGet包就在这里. 要使用此库,请正常配置ASP.NET Identity.然后在调用AddIdentityServer后使用AddAspNetIdentity扩展方法: public void ConfigureServices(IServiceCollection services)…
我们为IdentityServer提供了多种免费和商业支持和咨询选项. 5.1 免费支持 免费支持是基于社区的,并使用公共论坛 5.1.1 StackOverflow StackOverflow 社区里日益增多的 IdentityServer 用户在监视着上面的问题.如果时间允许,我们也会试着尽可能多地回答这些问题. 您可以使用此Feed订阅所有IdentityServer4相关问题: https://stackoverflow.com/questions/tagged/?tagnames=id…
注意 对于任何先决条件(例如模板),首先要查看概述. 接下来,我们将添加对外部认证的支持.这非常简单,因为您真正需要的是ASP.NET Core兼容的身份验证处理程序. ASP.NET Core本身支持Google,Facebook,Twitter,Microsoft Account和OpenID Connect.此外,你可以找到很多其他的认证供应商实现在这里. 12.1 添加Google支持 要使用Google进行身份验证,首先需要向他们注册.这是在他们的开发者控制台完成的.通过将/signi…
规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAuth 2.0协议. 对于相同的角色,不同的文献将使用不同的术语 -- 你可能也发现了安全令牌服务(Security Token Service),身份提供程序(Identity Provider),授权服务器(Authorization Server),IP-STS 等. 但它们完全相同:一种向客户…
此端点允许撤消访问令牌(仅限引用令牌)和刷新令牌.它实现了令牌撤销规范(RFC 7009). token 要撤销的令牌(必填) token_type_hint access_token或refresh_token(可选) 示例 POST /connect/revocation HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRS…
发现端点可用于检索有关IdentityServer的元数据 - 它返回发布者名称,密钥材料,支持的范围等信息.有关详细信息,请参阅规范. 发现端点可通过/.well-known/openid-configuration相对于基地址获得,例如: https://demo.identityserver.io/.well-known/openid-configuration 注意 您可以使用IdentityModel客户端库以编程方式从.NET代码访问发现端点.有关更多信息,请查看IdentityMo…
第38章 刷新令牌 由于访问令牌的生命周期有限,因此刷新令牌允许在没有用户交互的情况下请求新的访问令牌. 以下流程支持刷新令牌:授权代码,混合和资源所有者密码凭据流.需要明确授权客户端通过设置AllowOfflineAccess来请求刷新令牌true. 38.1 其他客户端设置 AbsoluteRefreshTokenLifetime 刷新令牌的最长生命周期(秒).默认为2592000秒/ 30天.零允许刷新令牌,当仅在SlidingRefreshTokenLifetime传递后使用时过期.Re…
OAuth 2.0为令牌端点定义了标准授权类型,例如password,authorization_code和refresh_token.扩展授权是一种添加对非标准令牌颁发方案(如令牌转换,委派或自定义凭据)的支持的方法. 您可以通过实现IExtensionGrantValidator接口添加对其他授权类型的支持: public interface IExtensionGrantValidator { /// <summary> /// Handles the custom grant requ…
授权类型是指定客户端如何与IdentityServer交互的方式.OpenID Connect和OAuth2.0规范定义了以下授权类型: Implicit Authorization code Hybrid Client credentials Resource owner password Device flow Refresh tokens Extension grants 你可以在Client的配置中用AllowedGrantTypes 来指定授权类型. 一个客户端可以指定不止一种授权类型…
当用户注销 IdentityServer并且他们使用外部身份提供程序登录时,可能会将其重定向到注销外部提供程序.并非所有外部提供商都支持注销,因为它取决于它们支持的协议和功能. 要检测是否必须将用户重定向到外部身份提供程序以进行注销通常是通过使用idp在IdentityServer中发布到cookie中的声明来完成的.设置到此声明中的值是AuthenticationScheme相应的身份验证中间件.在签出时,咨询此声明以了解是否需要外部签出. 由于正常注销工作流程已经需要清理和状态管理,因此将用…
注销IdentityServer就像删除身份验证cookie一样简单,但是为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供者)中签名. 24.1 删除认证 要删除身份验证cookie,只需使用HttpContext扩展方法SignOutAsync即可.您需要传递使用的方案(IdentityServerConstants.DefaultCookieAuthenticationScheme除非您已更改,否则提供此方案): await HttpContext.SignOut…
ASP.NET Core有一种灵活的方式来处理外部身份验证.这涉及几个步骤. 注意 如果您使用的是ASP.NET Identity,则会隐藏许多基础技术细节.建议您还阅读Microsoft 文档并执行ASP.NET Identity 快速入门. 22.1 为外部提供者添加身份验证处理程序 与外部提供者通信所需的协议实现封装在身份验证处理程序中.一些提供商使用专有协议(例如Facebook等社交提供商),有些提供商使用标准协议,例如OpenID Connect,WS-Federation或SAML…
在之前的快速入门中,我们探讨了API访问和用户身份验证.现在我们想把这两个部分放在一起. OpenID Connect和OAuth 2.0组合的优点在于,您可以使用单个协议和使用令牌服务进行单次交换来实现这两者. 在之前的快速入门中,我们使用了OpenID Connect隐式流程.在隐式流程中,所有令牌都通过浏览器传输,这对于身份令牌来说是完全正确的.现在我们还想要一个访问令牌. 访问令牌比身份令牌更敏感,如果不需要,我们不希望将它们暴露给"外部"世界.OpenID Connect包含…
在本快速入门中,我们希望通过OpenID Connect协议向我们的IdentityServer添加对交互式用户身份验证的支持. 一旦到位,我们将创建一个将使用IdentityServer进行身份验证的MVC应用程序. 11.1 添加 IdentityServer 内置了 OpenID Connect 需要的所有协议支持.你需要提供必需的 UI 部分,包括 登录.注销.授权确认以及错误页. 因为在每个 IdentityServer 的实现中,视觉.感觉以及实际工作流可能总是有所不同的,所以我们提…
快速入门介绍了使用IdentityServer保护API的最基本方案. 我们将定义一个API和一个想要访问它的客户端. 客户端将通过提供ClientCredentials在IdentityServer请求访问令牌,ClientCredentials充当客户端和IdentityServer都知道的秘密,并且它将使用该令牌来访问API. 9.1设置ASP.NET核心应用程序 首先为应用程序创建一个目录 - 然后使用我们的模板创建一个包含基本IdentityServer设置的ASP.NET Core应…
大多数现代应用程序或多或少看起来像这样: 最常见的互动是: 浏览器与Web应用程序通信 Web应用程序与Web API进行通信(Web应用程序自身 或 代表用户 与 Web API 通信) 基于浏览器的应用程序与Web API通信 本地应用程序与Web API通信 基于服务器的应用程序与Web API通信 Web API与Web API进行通信(WebAPI自身 或 代表用户与另一个WebAPI 通信) 通常,每个层(前端,中间层和后端)都必须保护资源并实现身份验证和授权 - 通常针对同一个用户…