我有使用IdentityServer4的Visual Studio解决方案的工作原型,它具有:
- IdentityServer (asp.net core mvc) API项目(asp.net core mvc)Web Client 1 (MVC/Angular)(用户名/密码保护的管理门户)与API对话
- Web Client 2 (MVC)(面向公众的网站,无需登录)
我有登录工作和Web客户端1工作的基本测试与API交谈。
我的问题最好用一个例子来描述:假设我有一个方法在我的API与[授权]属性保护GetCourses(与授权保护,所以它不能被任何人访问,如果他们知道URL)。这目前的工作,因为我的测试是登录与用户在web客户端1(这将被用于编辑课程最终)。但是在我的面向公众的网站上,我希望能够在IdentityServer中调用带有ClientCredentials的GetCourses,这样我就可以在网站上显示课程列表。我想我做这件事的方式是错误的,所以如果有人能提供任何指导,我将不胜感激。
谢谢理查德。
假设您对Web Client 1使用cookie身份验证:
// for Web Client 1 Scheme = Cookies
app.UseCookieAuthentication();
// for Web Client 2 Scheme = Bearer
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
...
});
你只需要像下面这样使用ActiveAuthenticationSchemes
:
[Authorize(ActiveAuthenticationSchemes = "Cookies, Bearer")]
public IActionResult GetCourses(){ ... }
更多信息请参见https://docs.asp.net/en/latest/security/authorization/limitingidentitybyscheme.html