Identity Server定义API资源与Scopes时代码与官方文档不符问题求助
问题核心原因如下:
- 你引用了错误的
Scope类:IdentityServer相关的Scope类定义在IdentityServer4.Models(IdentityServer4版本)或者Duende.IdentityServer.Models(Duende IdentityServer版本)命名空间下,你现在自动引入的是Microsoft.OpenApi.Writers下的同名无关类,自然会出现类型不匹配的报错。 - 新旧版本API差异导致写法冲突:
- 早期版本(IdentityServer4 3.x及更低版本)的
ApiResource.Scopes属性本身就是ICollection<string>类型,你最开始传入字符串数组的写法完全符合该版本的API要求,所以运行正常。 - 后续版本(IdentityServer4 4.x、Duende IdentityServer所有版本)对API做了重构,
ApiResource.Scopes属性调整为ICollection<Scope>类型,官方文档的写法是对应新版本的API设计。
- 早期版本(IdentityServer4 3.x及更低版本)的
- 另外你提到的写法报错还有一个小细节:官方示例里的
Scopes = { new Scope("my_wtf_scope") }是C#集合对象初始化的增量添加语法,前提是ApiResource的构造函数已经默认初始化了Scopes属性的集合实例;如果你用的版本没有默认初始化,需要显式创建集合再赋值,写法如下:
yield return new ApiResource("my_wtf_resource") { Scopes = new List<Scope> { new Scope("my_wtf_scope") } };
内容的提问来源于stack exchange,提问作者Konrad Viltersten
相关产品推荐
相关产品推荐

