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