【问题标题】:Is there a way to generate an access token from within Identity Server without using the endpoints?有没有办法在不使用端点的情况下从 Identity Server 中生成访问令牌?
【发布时间】:2017-02-20 06:15:58
【问题描述】:

我正在构建身份服务器部署(身份服务器 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.
    }
}

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

我也认识到我可以使用 IdentityModel 客户端向我自己的端点发出请求,但这将涉及我想避免的更多配置 - 更不用说我似乎不应该这样做'不必在身份服务器应用程序本身内执行此操作。

【问题讨论】:

  • 这对我也有用。
  • 从 idsrv 看,那个 register-users-application 只是另一个 RP(客户端)。如果您稍后想将注册应用程序移动到单独的主机 - 建议这样做(保持 idsrv 单独) - 这也容易得多,因为您已经将两者解耦了。

标签: c# asp.net oauth identityserver4


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2012-01-15
    • 2023-03-08
    • 2016-07-04
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多