【问题标题】:Mixing IdentiyServer4 and WebAPI .net 4.5.2混合 IdentityServer4 和 WebAPI .net 4.5.2
【发布时间】:2018-08-25 08:44:24
【问题描述】:

我是 IdentityServer 的新手。我已经按照 IdentityServer4 教程here

但本教程仅展示如何保护 .net 核心 API。我找不到任何使用 IdentityServer4 的教程,该教程还展示了如何保护 .net 4.# WebAPI。我在 StackOverflow here 上找到了一篇帖子,建议使用 Microsoft Katana JWT 中间件,但我不知道如何实现,因为我是新手。

任何人都可以向我指出一个教程(或必要时的组合),它将为我指明正确的方向。提前致谢。

更新:

我正在尝试将 IdentityServer3 用于 API,将 IdentityServer4 用于授权服务器。

我已经创建了一个 IdentityServer4 授权服务器,这似乎工作正常。

我创建了一个 WebAPI(使用完整的 .Net 框架 - 在本例中为 4.7.1)。我已按照 IdentityServer3 文档中有关如何将 IdentityServer 合并到 API 中的说明进行操作。因此,正如预期的那样,当我尝试通过浏览器直接导航到控制器时,我现在得到了 401 未经授权的访问,所以这是安全的。

我创建了一个控制台客户端。我已将其配置为指向 IdentityServer4 Auth Server,现在获取访问令牌。

仅当我在客户端上使用此访问令牌设置 BearerToken 时,我仍然得到 401 Unauthorized。我已经将 http 和 https 都用于授权服务器了……我现在又摸不着头脑了!

【问题讨论】:

  • 问题类似,但我想保护 WebAPI,而不是 Webforms,并且客户端将是一个手机应用程序,但那一点现在并不重要,我正在使用控制台应用程序目前作为测试客户。我正在为 WebAPI 端所需的中间件而苦苦挣扎。我现在正在尝试从 IdentityServer3 的角度设置 API(使用 IS3 文档),但将服务器保持为 IdentityServer4...我会发回我发现的内容。
  • 我认为您可以遵循 IdentityServer4 文档,但不要使用 IdentityServer4 包,而应该使用 IdentityServer3 包。因为任一版本都支持相同的规范。

标签: asp.net-web-api identityserver4 identityserver3


【解决方案1】:

Here 是完整的示例。如您发现自己的简短指南中所述, 您所需要的(在添加所有必要的包之后)就是将以下内容添加到您的 Startup.cs:

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
    {
        Authority = "https://identity.identityserver.io",
        RequiredScopes = new[] { "api1", "api2" }
    });

原来当与ValidationMode = ValidationMode.ValidationEndpoint 选项一起使用时,来自Identityserver 3 的IdentityServerBearerTokenAuthentication 与Identityserver 4 不兼容。切换到ValidationMode.Local 解决了这种情况。

【讨论】:

  • 谢谢,但我已经有了。这是我在 API 项目中启动的副本:public class Startup { public void Configuration(IAppBuilder app) { app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions { Authority = "https://localhost:5001", ValidationMode = ValidationMode.ValidationEndpoint, RequiredScopes = new[] { "MyApi" } }); var config = new HttpConfiguration(); config.MapHttpAttributeRoutes(); config.Filters.Add(new AuthorizeAttribute()); app.UseWebApi(config); } }
  • 抱歉,看起来有点乱!
  • 对了,你为什么使用ValidationMode.ValidationEndpoint?这是故意的吗?您是否使用 jwt.io 检查过您的令牌?里面真的有 MyApi 作用域吗?
  • 我猜,如果您将 ValidationEndpoint 切换到 Local,它就有机会与 IdSrv4 一起工作。不同之处在于,在本地模式下,中间件根据规范在本地验证令牌,而在 ValidationEndpoint 模式下,它使用 IdSrv 进行验证。这太内部了,可能是特定于版本的。尝试切换!
  • 哈哈!!!这行得通!将 ValidationEndpoint 更改为 Local 有效!非常感谢你!我松了一口气:o)我会研究在发布到 Live 环境时是否可以作为本地离开......再次感谢!
猜你喜欢
  • 2019-03-21
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多