我的解決方案使用NopCommece外部認證插件工作,但我並不滿意不得不離開NOP認證和註冊時IdentityServer使用NOP數據庫了。通過外部認證路線似乎是獲得OpenID Connect id_token的唯一途徑。休息一下,一段時間來,雖然重溫代碼後,我發現了以下內容:
https://identityserver.github.io/Documentation/docsv2/configuration/serviceFactory.html https://identityserver.github.io/Documentation/docsv2/configuration/serviceFactory.html
通過實現定製服務,IdentityServer允許您使用令牌創建和生成,它使用依賴注入系統混亂使您可以訪問默認服務的安裝版本。
我以前曾遵循一個答案,它向令牌端點發送了一個用戶名和密碼。 OpenID規範說這應該只返回access_token,這正是IdenttyService中的DefaultTokenService所做的。然而,通過添加一個CustomTokenResponseGenerator,我能夠重新使用該請求來創建並返回一個id_token。
CustomTokenResponse類:
internal class CustomTokenResponseGenerator : ICustomTokenResponseGenerator
{
protected ITokenService _tokenService;
public CustomTokenResponseGenerator(ITokenService tokenService)
{
_tokenService = tokenService;
}
public Task<TokenResponse> GenerateAsync(ValidatedTokenRequest request, TokenResponse response)
{
var tokenRequest = new TokenCreationRequest
{
Subject = request.Subject,
Client = request.Client,
Scopes = request.ValidatedScopes.GrantedScopes,
//Nonce = request.AuthorizationCode.Nonce,
ValidatedRequest = request
};
var idToken = _tokenService.CreateIdentityTokenAsync(tokenRequest);
idToken.Wait();
var jwt = _tokenService.CreateSecurityTokenAsync(idToken.Result);
response.IdentityToken = jwt.Result;
return Task.FromResult(response);
}
}
如何注入定製服務Startup.cs:
factory.TokenService = new Registration<ITokenService, TokenService>();
factory.CustomTokenResponseGenerator = new Registration<ICustomTokenResponseGenerator, CustomTokenResponseGenerator>();
我已經試過代碼[編程登錄identityserver3(https://開頭stackoverflow.com/questions/40949893/programmatically-sign-in-to-identityserver3)並意識到這總是返回一個access_token,不幸的是,後端必須有id_token。 – Suddy
看到這個類:https://github.com/IdentityServer/IdentityServer3/blob/master/source/Core/Services/Default/DefaultTokenService.cs - 如果你可以安裝它,你可以用它生成一個id_token – stombeur
感謝找到我認爲關鍵部分雖然在「_if_我可以實例化它」的課程。到目前爲止,我已經實現了JohnC在他的回答中所建議的一個簡單的IdentityServer,並且正在探索如何滿足我們的要求。 – Suddy