C# 使用IdentityServer保护API
我已经开始使用IdentityServer4,使用ASP.NET标识和实体框架示例 有一个MVC应用程序,它使用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
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
- 身份服务器项目
- MVC项目
- API项目
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规范可能是一个好主意。