有没有办法在不使用端点的情况下从Identity Server中生成访问令牌?

时间:2016-10-11 16:05:30

标签: c# asp.net oauth identityserver4

我正在构建身份服务器部署(Identity Server 4,托管在ASP.NET Core MVC应用程序中)。作为新用户注册过程的一部分,我需要身份服务器应用程序针对另一个API发出请求。我基本上想使用客户端凭据流来发出此请求,但是不是让身份服务器对其自己的端点发出http请求,是否可以在C#中以编程方式生成令牌? / p>

我想做的事情是这样的:

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.
    }
}

我看到IdentityServer4中有一个ITokenService,但它需要一个TokenCreationRequest填充你只有在你有一个http请求(用于令牌)处理时才能得到的东西,所以它似乎是它只对IdentityServer4本身有用。

我也认识到我可以使用IdentityModel客户端对我自己的端点发出请求,但这会涉及到我希望避免的更多配置 - 更不用说它似乎就像我不应该从身份服务器应用程序本身那样做。

1 个答案:

答案 0 :(得分:2)

在IdentityServer 3中,可以调用IssueClientToken() OWIN扩展方法。 在IdSrv 4中,使用IdentityServerTools.IssueJwtAsync()IssueClientJwtAsync()