Ben*_*ins 6 c# asp.net oauth identityserver4
我正在构建身份服务器部署(Identity Server 4,托管在 ASP.NET Core MVC 应用程序中)。作为新用户注册过程的一部分,我需要身份服务器应用程序针对另一个 API 发出请求。基本上,我想使用客户端凭证流来发出此请求,但不是让身份服务器针对其自己的端点发出 http 请求,而是可以在 C# 中以编程方式生成令牌吗?
我想做的是这样的:
public class AccountController : Controller
{
[HttpPost("register")]
public async Task<IActionResult> Register(UserRegistrationModel model)
{
// do stuff like validate model, create user, update database, etc
// generate access token for other API
var client = identityServer4DbContext.Clients.FirstOrDefault(c => c.Id = "myself");
var token = tokenService.CreateAccessToken(client, StandardScopes.All.Concat(scopeForMyOtherApi));
var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://myotherapi/");
var result = await httpClient.GetAsync("resource/info-i-need");
// do something with result.
}
}
Run Code Online (Sandbox Code Playgroud)
我看到 IdentityServer4 中有一个ITokenService,但它需要TokenCreationRequest填充只有当你有一个 http 请求(对于令牌)要处理时才能得到的东西,所以看起来它只对 IdentityServer4 本身有用。
我还认识到我可以使用IdentityModel客户端向我自己的端点发出请求,但这会涉及更多我想避免的配置 - 更不用说我似乎不必从在身份服务器应用程序本身内。
在 IdentityServer 3 中可以调用IssueClientToken()OWIN 扩展方法。在 IdSrv 4 中,使用IdentityServerTools.IssueJwtAsync()和IssueClientJwtAsync()。