C# 使用IdentityServer保护API

C# 使用IdentityServer保护API,c#,asp.net-core,asp.net-core-mvc,asp.net-core-2.0,identityserver4,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.0,Identityserver4,我已经开始使用IdentityServer4,使用ASP.NET标识和实体框架示例 有一个MVC应用程序,它使用IdentityServer获取访问令牌,使用“客户端凭据和混合”授权类型,并使用此访问令牌调用API 解决方案如下所示: services.AddAuthentication(options => { options.DefaultScheme = "Cookies"; options.De

我已经开始使用IdentityServer4,使用ASP.NET标识和实体框架示例

有一个MVC应用程序,它使用IdentityServer获取访问令牌,使用“客户端凭据和混合”授权类型,并使用此访问令牌调用API

解决方案如下所示:

services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
  • 身份服务器项目
  • MVC项目
  • API项目
我将要添加一个新的私有API,但我想限制它,以便只有MVC应用程序才能调用它,并且只能在服务器端调用它

我最初的想法是为这个私有API添加一个新的API作用域,并且只将该作用域赋予MVC应用程序。问题是,我知道用户可以从MVC应用程序自由访问访问令牌,因此他们可以访问令牌,并使用自己的参数调用私有API

建议采用什么方法来保护API,以便攻击者可以获得访问令牌并提供对API的访问

我是否需要创建一个新的基于“客户端凭据”的客户端,供MVC应用程序使用?让MVC项目为同一个API使用两个独立的客户端似乎有点奇怪

有关信息,MVC应用程序中的AddAuthentication如下所示:

services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })

我认为如果与IdentityServer示例不同,is应该类似。

“用户可以从MVC应用程序自由访问访问访问令牌”-如何验证MVC应用程序中的用户?令牌存储在哪里,在哪里传输?这是服务器端MVC应用程序还是客户端SPA?在访问新的私有API时,您是否需要代表用户行事?嘿,好问题。用户通过IdentityServer上的登录页面进行身份验证,因此我猜在某个阶段,访问令牌将出现在MVC应用程序拾取的重定向中。我不确定它存储在哪里(抱歉,仍在学习IdentityServer),但我猜它是用户可以访问的地方?我找不到任何文件表明它可以被视为安全的。这是一个服务器端MVC应用程序,不需要用户上下文就可以调用此私有API。在MVC的
启动中
您的
AddAuthentication()
调用是什么样子的?你在那里使用什么方案?这将让我们了解您如何将IdSrv集成到应用程序中(这将告诉我们令牌的公开位置)。-如果你不需要用户上下文,你也可以让你的MVC应用程序有一个内部的客户端id/密码来单独访问你的API。因此,您根本不需要用户的令牌。因为您使用的是cookie身份验证,所以令牌实际上并不向用户公开。只有一个包含用户身份的受保护cookie。因此,您也可以将访问令牌用于您的私有API。最终用户在使用OIDC提供程序进行身份验证时是否可以看到该令牌取决于所选的身份验证流。此时,花一些时间阅读OpenID Connect和OAuth 2规范可能是一个好主意。