首页 文章

IdenitityServer4 . 如何在登录页面内创建访问令牌?

提问于
浏览
1

我使用IdentityServer4和我自己的登录页面创建了一个IdentityServer应用程序 . 当用户登录(或由于凭据无效而无法登录)时,我需要创建该交互的审核日志记录 . 我的系统有一个单独的Web服务来处理审计日志记录 . 为了从我的IdentityServer实例中的登录页面调用该服务,我需要一个访问令牌 . 在IdentityServer4中是否有一个类/方法,我可以调用它来创建一个访问令牌?在我的应用程序实例中对令牌 endpoints 进行Web服务调用以获取令牌似乎有点过分 .

即我的IdentityServer应用程序需要能够为外部客户端创建访问令牌,但它还需要能够创建它们以供自己使用,以允许它能够调用外部服务,如审计日志记录 .

或者我看错了什么?

2 回答

  • 2

    只需将“IdentityServerTools”注入您的类,它就具有必要的API .

  • 0

    创建访问令牌的类是 DefaultTokenService ,它的可访问性级别为 public .

    https://github.com/IdentityServer/IdentityServer4/blob/dev/src/IdentityServer4/Services/DefaultTokenService.cs

    相关方法是:

    public virtual async Task<Token> CreateAccessTokenAsync(TokenCreationRequest request)
    

    所以似乎有可能 .

    或者我看错了什么?

    我可能会推迟那个产品所有者 .

    但我确实觉得你可以这么讽刺

    • 使用client_credentials授权类型将IdentityServer注册为客户端,并允许其访问Audit Logging Api Resource .

    • 让IdentityServer客户端从自身获取access_token

    • 然后作为IdentityServer客户端进行调用以审核记录Api资源,然后转向并回调到IdentityServer以验证它刚刚生成的access_token .

    这是其他客户工作的方式,为什么不呢?

    EDIT

    仅仅是为了文档,这里是我基于最低权限指令的内容:

    public AccountController(
        IIdentityServerInteractionService interaction,
        IClientStore clientStore,
        IHttpContextAccessor httpContextAccessor,
        ITokenCreationService tokenCreationService,
        TestUserStore users = null)
    {
        _users = users ?? new TestUserStore(Config.Users);
        _interaction = interaction;
        _account = new AccountService(interaction, httpContextAccessor, clientStore);
        _identityServerTools = new IdentityServerTools(httpContextAccessor, tokenCreationService);
    }
    

相关问题