Oauth 2.0 IdentityServer4-MVC应用程序托管Aurelia SPA和#x2B;WebAPI

Oauth 2.0 IdentityServer4-MVC应用程序托管Aurelia SPA和#x2B;WebAPI,oauth-2.0,asp.net-core-2.0,identityserver4,dotnetopenauth,Oauth 2.0,Asp.net Core 2.0,Identityserver4,Dotnetopenauth,我正在尝试做一些看起来很简单的事情。我浏览了IS4快速入门,发现了很多关于OAuth online的东西,但是随着Core 2.0的最新更改,我很难找到一个示例来说明如何做到这一点。很多东西都很接近,但没有什么东西是一致的,每当我尝试组合方法时,我都会弄错。我大部分时间都在工作,但如果能帮我越过球门线,我将不胜感激 设置如下: IS4-独立生活 MVC-独立存在,是Aurelia应用程序的宿主 API-独立存在,是Aurelia应用程序的主要目标 MVC使用OpenIdConnect中间件与

我正在尝试做一些看起来很简单的事情。我浏览了IS4快速入门,发现了很多关于OAuth online的东西,但是随着Core 2.0的最新更改,我很难找到一个示例来说明如何做到这一点。很多东西都很接近,但没有什么东西是一致的,每当我尝试组合方法时,我都会弄错。我大部分时间都在工作,但如果能帮我越过球门线,我将不胜感激

设置如下:

  • IS4-独立生活
  • MVC-独立存在,是Aurelia应用程序的宿主
  • API-独立存在,是Aurelia应用程序的主要目标
MVC使用OpenIdConnect中间件与IS4对话,这很好。主持登录页面并将我返回到相应的控制器。。。使用:

HttpContext.GetTokenAsync("access_token") 
我得到了我所有的用户声明,这些声明都很重要。控制器方法启动一个视图,该视图发出我的Aurelia应用程序

这里是棘手的部分-一旦Aurelia应用程序启动并运行,用户就不需要再次登录,因此我不希望获得严格的JS授权。理想情况下,我希望能够使用登录到MVC时提供的相同访问令牌,并在SPA中使用该令牌访问API。这意味着API必须接受已颁发给MVC应用程序的承载令牌,MVC应用程序位于不同的域上。如果可能的话,我可以像下面那样把代币拿到温泉浴场

如果这不正常,我尝试使用此功能单独登录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 core和IS4的身份验证方面已经有了很多突破性的变化,它与IS3做的事情不同