IdentityServer4 - MVC应用程序托管Aurelia SPA + WebAPI

时间:2018-02-04 21:34:16

标签: oauth-2.0 asp.net-core-2.0 identityserver4 dotnetopenauth

我正在尝试做一些看起来很简单的事情。我查看了IS4快速入门,发现了一些关于OAuth在线的事情,但是随着Core 2.0的最新变化,我很难找到一个如何做到这一点的例子。很多东西都很接近,但没有什么可以排成一线,任何时候我尝试结合方法,我都错了。我大部分时间都在工作,但我很感激任何帮助都能超越目标线。

设置是这样的:

  • IS4 - 独自生活
  • MVC - 独立存在,并且是Aurelia应用的主持人
  • API - 独立存在,是Aurelia应用程序的主要目标

MVC使用OpenIdConnect中间件与IS4通信,这很好用。托管登录页面并将我返回到我的相应控制器......使用:

HttpContext.GetTokenAsync("access_token") 

我得到了所有用户声明,这很重要。控制器方法启动一个发出我的Aurelia应用程序的视图。

这是棘手的部分 - 一旦Aurelia应用程序启动并运行,用户就不需要再次登录,所以我不想要严格的JS授权。理想情况下,我希望能够在登录MVC时使用相同的access_token,并在SPA中使用它来访问API。这意味着API必须接受已发布到MVC应用程序的持有者令牌 - 该应用程序位于不同的域中。如果可能的话,我可以像下面那样将令牌送到SPA。

如果不行,我尝试使用它来单独登录API:

var disco = DiscoveryClient.GetAsync("http://localhost:8552").Result;
if (disco.IsError)
{
    return BadRequest();
}
// request token
var tokenClient = new TokenClient(disco.TokenEndpoint, "MyApi", "secret");
var tokenResponse = tokenClient.RequestClientCredentialsAsync("api1").Result;

if (tokenResponse.IsError)
{
    return BadRequest();
}
HttpContext.Response.Cookies.Append("access_token", tokenResponse.AccessToken);

启动视图后,我使用令牌填充隐藏字段,然后我可以使用该令牌在SPA中进行抓取调用。问题是,该令牌中没有用户声明。当我点击API的控制器时,用户主体中没有用户声明,令牌中也没有任何声明。

任何提示都将不胜感激。我已经失去了玩这些东西的日子,虽然我比以前更加快速,但是.Net核心的身份验证有很多重大变化,IS4的做法与IS3有所不同。

0 个答案:

没有答案