2017-02-24 88 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