第41章 CORS

IdentityServer中的许多端点将通过基于JavaScript的客户端的Ajax调用进行访问。鉴于IdentityServer最有可能托管在与这些客户端不同的源上,这意味着需要配置跨源资源共享(CORS)。

41.1 基于客户端的CORS配置

配置CORS的一种方法是在客户端配置上使用AllowedCorsOrigins该集合。只需将客户端的原点添加到集合中,IdentityServer中的默认配置将查询这些值以允许来自源的跨源调用。

注意

配置CORS时,请务必使用原点(不是URL)。例如:https://foo:123/是一个URL,而是https://foo:123一个原点。

如果您使用我们提供的“内存中”或基于EF的客户端配置,则将使用此默认CORS实现。如果您定义自己的IClientStore,那么您将需要实现自己的自定义CORS策略服务(见下文)。

41.2 自定义Cors策略服务

IdentityServer允许托管应用程序实现ICorsPolicyService完全控制CORS策略。

要实现单一的方法是:Task<bool> IsOriginAllowedAsync(string origin)。如果允许原点则返回true,否则返回false

实现后,只需在DI中注册实现,然后IdentityServer将使用您的自定义实现。

41.2.1 DefaultCorsPolicyService

如果您只是希望对一组允许的原点进行硬编码,那么您可以使用一个预先构建ICorsPolicyService的实现调用DefaultCorsPolicyService。这将被配置为DI单例,并以其硬编码的AllowedOrigins收集,或设置标志AllowAll为true允许所有的源点。例如,在ConfigureServices

var cors = new DefaultCorsPolicyService(_loggerFactory.CreateLogger<DefaultCorsPolicyService>())
{
AllowedOrigins = { "https://foo", "https://bar" }
};
services.AddSingleton<ICorsPolicyService>(cors);

注意

AllowAll谨慎使用。

41.3 将IdentityServer的CORS策略与ASP.NET Core的CORS策略混合

IdentityServer使用ASP.NET Core的CORS中间件来提供其CORS实现。托管IdentityServer的应用程序可能还需要CORS用于自己的自定义端点。通常,两者应该在同一个应用程序中一起工作。

您的代码应使用ASP.NET Core中记录的CORS功能,而不考虑IdentityServer。这意味着您应该定义策略并正常注册中间件。如果您的应用程序在ConfigureServices中定义了策略,那么这些策略应继续在您使用它们的相同位置(在您配置CORS中间件的地方或在EnableCors控制器代码中使用MVC 属性的位置)。相反,如果您使用CORS中间件(通过策略构建器回调)定义内联策略,那么它也应该继续正常工作。

您使用ASP.NET Core CORS服务与IdentityServer之间可能存在冲突的一种情况是您决定创建自定义ICorsPolicyProvider。鉴于ASP.NET Core的CORS服务和中间件的设计,IdentityServer实现了自己的自定义ICorsPolicyProvider并将其注册到DI系统中。幸运的是,IdentityServer实现旨在使用装饰器模式来包装ICorsPolicyProvider已在DI中注册的任何现有模式 。这意味着你也可以实现ICorsPolicyProvider,但它只需要在DI中的IdentityServer之前注册(例如,在ConfigureServices)。

github地址

第41章 CORS - Identity Server 4 中文文档(v1.0.0)的更多相关文章

  1. 第18章 启动 - Identity Server 4 中文文档(v1.0.0)

    IdentityServer是中间件和服务的组合.所有配置都在您的启动类中完成. 18.1 配置服务 您可以通过调用以下方法将IdentityServer服务添加到DI系统: public void ...

  2. 第66章 视频 - Identity Server 4 中文文档(v1.0.0)

    第66章 视频 66.1 2019 January [NDC] - 使用ASP.NET Core 2.2和3.0保护Web应用程序和API 1月[NDC] - 为基于OpenID Connect / ...

  3. 第56章 Client - Identity Server 4 中文文档(v1.0.0)

    该Client模型的OpenID Connect或OAuth 2.0 客户端-例如,本地应用,Web应用程序或基于JS的应用程序. 56.1 Basics Enabled 指定是否启用客户端.默认为t ...

  4. 第21章 登录 - Identity Server 4 中文文档(v1.0.0)

    为了使IdentityServer能够代表用户发出令牌,该用户必须登录IdentityServer. 21.1 Cookie身份验证 使用由ASP.NET Core中的cookie身份验证处理程序管理 ...

  5. 第2章 术语 - Identity Server 4 中文文档(v1.0.0)

    规范.文档和对象模型等都使用特定的术语来表述. 2.1 IdentityServer IdentityServer是OpenID Connect提供程序 - 它实现OpenID Connect和OAu ...

  6. 第64章 学习 - Identity Server 4 中文文档(v1.0.0)

    以下是一些在线,远程和课堂培训选项,以了解有关ASP.NET Core Identity和IdentityServer4的更多信息. 64.1 现代应用程序的身份和访问控制(使用ASP.NET Cor ...

  7. 第57章 GrantValidationResult - Identity Server 4 中文文档(v1.0.0)

    该GrantValidationResult类模型补助确认为扩展授权和资源所有者密码授权的结果. 最常见的用法是使用身份验证(成功用例): context.Result = new GrantVali ...

  8. 第45章 工具 - Identity Server 4 中文文档(v1.0.0)

    该IdentityServerTools是为IdentityServer编写扩展代码时,你可能需要有效的内部工具的集合.要使用它,请将其注入代码,例如控制器: public MyController( ...

  9. 第32章 事件 - Identity Server 4 中文文档(v1.0.0)

    日志记录是更低级别的"printf"样式 - 事件代表有关IdentityServer中某些操作的更高级别信息.事件是结构化数据,包括事件ID,成功/失败信息,类别和详细信息.这使 ...

随机推荐

  1. iOS 开发中单元格cell高度自适应

    高度自适应分下面两种情况 1.用代码自定义的cell 用代码自定义的cell,cell高度自定义需要我们手动的去计算每个cell的字符串高度.然后返回对应的高度即可. 2.用XIB 或者 StoreB ...

  2. 【转】线段树完全版~by NotOnlySuccess

    线段树完全版  ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...

  3. javaScript Event Loop + NodeJs问题解析

    http://www.ruanyifeng.com/blog/2014/10/event-loop.html https://github.com/ElemeFE/node-interview/tre ...

  4. 解决 Visual Studio 点击添加引用无反应的问题

    如遇到vs2010 点击添加引用无反应,主要是因为windows系统推送的更新问题,把windows系统推送的更新都更新一遍就好了. 如果已经安装VS后 Windows系统推荐的更新.360推荐的安全 ...

  5. [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则

    [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...

  6. vue项目实践-前后端分离关于权限的思路

    前后端分离后权限的思路 最近看到许多关于权限的思路,但好像都是使用动态加载路由的方式,现在也分享下我在项目中使用的解决方案. 前后端分离关于权限的处理每个人都不一样,根据项目选择制定合适的方案就好 我 ...

  7. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:   ▲ 微信群聊界面里的@人功能    ▲ QQ群聊界面里 ...

  8. [Swift]LeetCode833. 字符串中的查找与替换 | Find And Replace in String

    To some string S, we will perform some replacement operations that replace groups of letters with ne ...

  9. [Swift]LeetCode855. 考场就座 | Exam Room

    In an exam room, there are N seats in a single row, numbered 0, 1, 2, ..., N-1. When a student enter ...

  10. 花点时间顺顺Git(上)

    花点时间顺顺Git(上) 为了让你们点进来贼努力的想了一个色彩斑斓大吉大利的标题,好,看正文 历史:Linus的作者创建了开源的Linux,02年以前代码管理都依赖手动合并,后来管理不了了,拒绝SVN ...