J'utilise IdentityServer4 et j'essaie d'ajouter une réclamation par défaut personnalisée à mon CLIENT
lorsque le jeton est créé. Ceci est possible si j'utilise le flux implicite et IProfileService
comme indiqué ci-dessous.IdentityServer4: Ajouter une réclamation personnalisée par défaut au Client Principal pour Client_Credential Granttype
public class MyProfileService : IProfileService
{
public MyProfileService()
{
}
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var claims = new List<Claim>
{
new Claim("DemoClaimType", "DemoClaimValue")
};
context.IssuedClaims = claims;
return Task.FromResult(0);
}
public Task IsActiveAsync(IsActiveContext context)
{
context.IsActive = true;
return Task.FromResult(0);
}
}
Et dans mon démarrage
services.AddIdentityServer()
.AddProfileService<MyProfileService>()
Toutefois, cela ne fonctionne pas avec mon client avec granttype client_credential car il semble cannot request OpenID scopes in client credentials flow
. Il s'avère que Iprofileservice comme le nom l'indique fonctionne pour Identity
Ressources pour lesquelles le champ d'application OpenId est valide. étant donné que je suis incapable de demander des étendues de profil avec le type de subvention client_credential, GetProfileDataAsync
ne sera jamais appelé.
Depuis je travaille uniquement avec les clients et qu'aucun utilisateur je besoin d'un moyen d'injecter des revendications dans le jeton sans avoir à les ajouter à l'objet client comme ci-dessous
new Client
{
ClientId = "myclient",
ClientName = "My Client",
AllowedGrantTypes = GrantTypes.ClientCredentials,
ClientSecrets = {new Secret("secret".Sha256())},
AllowedScopes = new List<string> {"api"},
AllowOfflineAccess = true,
//I Don't want to do this
Claims = new List<Claim>
{
new Claim("type","value")
}
}
Je ne veux pas ci-dessus parce que je fais ne souhaite pas que la revendication fasse partie des revendications client dans la base de données. Je dois le créer à la volée sur demande de jeton. J'espère que ma question est plus claire maintenant.
Le 'IProfileService' get appelé quand un 'access_token' est généré - il est utilisé pour ajouter des revendications. – moritzg
Nous ajoutons également le 'IProfileService' comme ceci:' services.AddTransient(); '(dans Startup> ConfigureServices) peut-être que c'est votre problème? –
moritzg
'AddProfileService' est la méthode correcte. – Mardoxx