2017-02-24 51 views
1

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

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

还是我看着事情都错了?

回答

0

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

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

相关的方法是:

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

所以它似乎是可能的。

-

还是我看事情都错了?

我可能推迟那个产品的所有者。

-

但我觉得讽刺的是,你可以

  1. 注册IdentityServer为使用client_credentials客户端授予类型,并允许其访问您的审计日志API资源。
  2. 有IdentityServer客户从自身
  3. 获得的access_token然后拨打电话作为IdentityServer客户端审计日志记录API资源,那么这将道岔周围,回调IdentityServer以验证它只是产生的access_token。

这样的方式,其他客户的工作,那么为什么不自己...

编辑

只是为了文档,这里是我所根据leastprivilege的指令:

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); 
} 
1

只需将'IdentityServerTools'注入您的课堂,即可获得必要的API。

+0

再次。没有提供文档和示例。 – r1verside

+0

,因为你到处都问得很好 - http://docs.identityserver.io/en/dev/topics/tools.html – leastprivilege

+0

再次谢谢你。顺便说一句,我不能upvote,直到答案得到编辑。一旦它是我会的。 – r1verside