JWT令牌使用所谓的Epoch或Unix时间来表示日期/时间. IdentityModel包含用于DateTime和DateTimeOffset转换到/来自Unix时间的扩展方法: var dt = DateTime.UtcNow; var unix = dt.ToEpochTime(); 注意 从.NET Framework 4.6和.NET Core 1.0开始,此功能通过DateTimeOffset.FromUnixTimeSeconds和DateTimeOffset.ToUnixTime…
JWT令牌使用Base64 URL编码进行序列化. IdentityModel包括Base64Url帮助编码/解码的类: var text = "hello"; var b64url = Base64Url.Encode(text); text = Base64Url.Decode(b64url); 注意 ASP.NET Core通过WebEncoders.Base64UrlEncode和WebEncoders.Base64UrlDecode提供内置支持. github地址…
在比较安全上下文中的字符串(例如比较键)时,应尽量避免泄漏时序信息. 该TimeConstantComparer类可以帮助: var isEqual = TimeConstantComparer.IsEqual(key1, key2); 注意 从.NET Core 2.1开始,此功能通过CryptographicOperations.FixedTimeEquals内置 github地址…
该RequestUrl是创建与查询字符串参数,例如URL的帮手: var ru = new RequestUrl("https://server/endpoint"); // produces https://server/endpoint?foo=foo&bar=bar var url = ru.Create(new { foo: "foo", bar: "bar" }); 作为Create方法的参数,您可以传入对象或字符串字典.在这两…
OpenID Connect动态客户端注册的客户端库是作为HttpClient扩展方法提供的. 以下代码发送注册请求: var client = new HttpClient(); var response = await client.RegisterClientAsync(new DynamicClientRegistrationRequest { Address = Endpoint, RegistrationRequest = new RegistrationRequest { Redi…
欢迎使用IdentityModel文档! 第一部分 协议客户端库 第1章 发现端点(Discovery Endpoint) 第2章 授权端点(Authorize Endpoint) 第3章 结束会话端点(EndSession Point) 第4章 令牌端点(Token Endpoint) 第5章 令牌自省端点(Token Introspection Endpoint) 第6章 令牌撤销端点(Token Revocation Endpoint) 第7章 UserInfo端点(UserInfo En…
IdentityModel是基于声明的身份,OAuth 2.0和OpenID Connect的.NET标准帮助程序库. 它具有以下高级功能: 标准OAuth 2.0和OpenID Connect端点的客户端库,如授权,令牌,发现,内省,撤销等. 令牌管理的助手 标准JWT声明类型和协议值的常量 用于访问X509证书库的简化API 用于base64 URL编码的misc帮助程序,时间常量字符串比较和纪元时间 怎么弄 github https://github.com/IdentityModel/I…
为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer. 21.1 Cookie身份验证 使用由ASP.NET Core中的cookie身份验证处理程序管理的cookie来跟踪身份验证. IdentityServer注册了两个cookie处理程序(一个用于身份验证会话,另一个用于临时外部cookie).默认情况下使用它们,如果要手动引用它们,可以从IdentityServerConstants类(DefaultCookieAuthenticationS…
IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ConfigureServices(IServiceCollection services) { var builder = services.AddIdentityServer(); } 您可以选择将选项传入此调用.有关选项的详细信息,请参见此 这将返回一个构建器对象,该构建器对象又有许多方便的方…
使用OAuth 2.0,OpenID Connect和声明时,声明类型和protocoal值有很多"魔术字符串".IdentityModel提供了几个常量字符串类来帮助它. 10.1 OAuth 2.0和OpenID Connect协议值 本OidcConstants类有补助的类型,参数名称,错误名称等所有的值 10.2 JWT声明类型 本JwtClaimTypes类在OpenID Connect,JWT和OAuth 2.0规范中的所有标准要求的类型-其中许多人也都聚集在IANA. g…
OpenID Connect发现端点的客户端库作为httpclient的扩展方法提供.该GetDiscoveryDocumentAsync方法返回一个DiscoveryResponse对象,该对象具有发现文档的各种元素的强类型和弱类型访问器. 在访问文档内容之前,应始终检查IsError和Error属性. 例: var client = new HttpClient(); var disco = await client.GetDiscoveryDocumentAsync("https://de…
存储X.509证书的常见位置是Windows X.509证书存储区.商店的原始API有点神秘(在.NET Framework和.NET Core之间也略有变化). X509类是一个简化的API从所述存储区加载证书.以下代码从个人计算机存储按名称加载证书: var cert = X509 .LocalMachine .My .SubjectDistinguishedName .Find("CN=sts") .FirstOrDefault(); 您可以从计算机或用户存储和My,Addres…
OAuth 2.0设备流设备授权的客户端库是作为HttpClient扩展方法提供的. 以下代码发送设备授权请求: var client = new HttpClient(); var response = await client.RequestDeviceAuthorizationAsync(new DeviceAuthorizationRequest { Address = "https://demo.identityserver.io/connect/device_authorize&qu…
OAuth 2.0令牌撤销的客户端库是作为扩展方法提供的HttpClient. 以下代码撤消撤销端点处的访问令牌令牌: var client = new HttpClient(); var result = await client.RevokeTokenAsync(new TokenRevocationRequest { Address = "https://demo.identityserver.io/connect/revocation", ClientId = "cl…
OpenID Connect UserInfo端点的客户端库是作为扩展HttpClient方法提供的. 以下代码将访问令牌发送到UserInfo端点: var client = new HttpClient(); var response = await client.GetUserInfoAsync(new UserInfoRequest { Address = disco.UserInfoEndpoint, Token = token }); 响应属于UserInfoResponse类型并具…
对于大多数情况,OAuth 2.0和OpenID Connect授权端点的GET请求需要具有许多查询字符串参数. 虽然您可以使用任何方法创建带参数的URL来创建正确的字符串,但RequestUrl类是完成此任务的简单帮助程序. 特别是,您可以使用CreateAuthorizeUrl扩展方法为授权端点创建URL - 它支持最常用的参数: /// <summary> /// Creates an authorize URL. /// </summary> /// <param n…
该RequestUrl类可用于构造URL发送到OpenID Connect EndSession endpoint. 该CreateEndSessionUrl扩展方法支持最常用的参数: /// <summary> /// Creates a end_session URL. /// </summary> /// <param name="request">The request.</param> /// <param name=&q…
令牌端点的客户端库(OAuth 2.0和OpenID Connect)作为HttpClient一组扩展方法提供.这允许HttpClient以您喜欢的方式创建和管理生命周期- 例如静态或通过像Microsoft这样的工厂HttpClientFactory. 4.1 请求令牌 调用主扩展方法RequestTokenAsync- 它直接支持标准参数,如客户端ID /机密(或断言)和授权类型,但它也允许通过字典设置任意其他参数.所有其他扩展方法最终在内部调用此方法: var client = new H…
OAuth 2.0令牌自省的客户端库是作为HttpClient扩展方法提供的. 以下代码将引用令牌发送到内省端点: var client = new HttpClient(); var response = await client.IntrospectTokenAsync(new TokenIntrospectionRequest { Address = "https://demo.identityserver.io/connect/introspect", ClientId = &…
第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授权(又…
该Client模型的OpenID Connect或OAuth 2.0 客户端-例如,本地应用,Web应用程序或基于JS的应用程序. 56.1 Basics Enabled 指定是否启用客户端.默认为true. ClientId 客户端的唯一ID ClientSecrets 客户端机密列表 - 访问令牌端点的凭据. RequireClientSecret 指定此客户端是否需要密钥才能从令牌端点请求令牌(默认为true) AllowedGrantTypes 指定允许客户端使用的授权类型.使用Gran…
第41章 CORS IdentityServer中的许多端点将通过基于JavaScript的客户端的Ajax调用进行访问.鉴于IdentityServer最有可能托管在与这些客户端不同的源上,这意味着需要配置跨源资源共享(CORS). 41.1 基于客户端的CORS配置 配置CORS的一种方法是在客户端配置上使用AllowedCorsOrigins该集合.只需将客户端的原点添加到集合中,IdentityServer中的默认配置将查询这些值以允许来自源的跨源调用. 注意 配置CORS时,请务必使用…
该GrantValidationResult类模型补助确认为扩展授权和资源所有者密码授权的结果. 最常见的用法是使用身份验证(成功用例): context.Result = new GrantValidationResult( subject: "818727", authenticationMethod: "custom", claims: optionalClaims); ...或使用错误和描述(失败用例): context.Result = new Grant…
该IdentityServerTools是为IdentityServer编写扩展代码时,你可能需要有效的内部工具的集合.要使用它,请将其注入代码,例如控制器: public MyController(IdentityServerTools tools) { _tools = tools; } 该IssueJwtAsync方法允许使用IdentityServer令牌创建引擎创建JWT令牌.这IssueClientJwtAsync是为服务器到服务器通信创建令牌的简单版本(例如,当您必须从代码中调用受…
日志记录是更低级别的"printf"样式 - 事件代表有关IdentityServer中某些操作的更高级别信息.事件是结构化数据,包括事件ID,成功/失败信息,类别和详细信息.这使得查询和分析它们变得容易,并提取可用于进一步处理的有用信息. 活动适用于ELK,Seq或Splunk等活动商店. 32.1 发出事件 默认情况下不会启用事件 - 但可以在ConfigureServices方法中进行全局配置,例如: services.AddIdentityServer(options =>…
IdentityServer使用ASP.NET Core提供的标准日志记录工具.Microsoft文档有一个很好的介绍和内置日志记录提供程序的描述. 我们大致遵循Microsoft使用日志级别的指导原则: Trace仅供开发人员解决问题的信息.这些消息可能包含敏感的应用程序数据(如令牌),不应在生产环境中启用. Debug遵循内部流程并理解为何做出某些决定.在开发和调试过程中具有短期实用性. Information用于跟踪应用程序的一般流程.这些日志通常具有一些长期价值. Warning对于应用…
您的身份服务器只是一个标准的ASP.NET Core应用程序,包括IdentityServer中间件.首先阅读有关发布和部署的官方Microsoft 文档(尤其是有关负载平衡器和代理的部分). 30.1 典型架构 通常,您将设计IdentityServer部署以实现高可用性: IdentityServer本身是无状态的,不需要服务器关联 - 但是有些数据需要在实例之间共享. 30.2 配置数据 这通常包括: 资源 客户 启动配置,例如密钥材料,外部提供商设置等...... 存储数据的方式取决于您…
注销IdentityServer就像删除身份验证cookie一样简单,但是为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供者)中签名. 24.1 删除认证 要删除身份验证cookie,只需使用HttpContext扩展方法SignOutAsync即可.您需要传递使用的方案(IdentityServerConstants.DefaultCookieAuthenticationScheme除非您已更改,否则提供此方案): await HttpContext.SignOut…
快速入门提供了各种常见IdentityServer方案的分步说明.他们从基础到复杂 - 建议您按顺序完成它们. 将IdentityServer添加到ASP.NET Core应用程序 配置IdentityServer 为各种客户发放令牌 保护Web应用程序和API 添加对基于EntityFramework的配置的支持 添加对ASP.NET身份的支持 添加AdminUI社区版以管理用户和配置 每个快速入门都有一个参考解决方案 - 您可以 在quickstarts文件夹中的IdentityServer…
我们对社区贡献非常开放,但您应该遵循一些指导原则,以便我们可以毫不费力地处理这个问题. 7.1 如何贡献? 最简单的方法是打开一个问题并开始讨论.然后我们可以决定是否以及如何实现功能或更改.如果您应提交包含更改代码的pull请求,请从描述开始,仅进行最小的更改并提供涵盖这些更改的测试. 首先阅读:成为一名优秀的开源公民 7.2 一般反馈和讨论? 请在 核心仓库问题跟踪 上开启一个讨论. 7.3 平台 IdentityServer是针对ASP.NET Core 2构建的,可在.NET Framew…