Ein paar Hintergrundinformationen: Ich bin gerade dabei, unseren Oauth-Server auf einen Identitätsserver zu aktualisieren. Wir verwenden hierfür IdentityServer4.Zurückgeben eines Benutzeranspruchs bei Verwendung des ResourceOwnerPassword-Berechtigungstyps
Aus Gründen der Abwärtskompatibilität muss ich so etwas wie ein Dienstkonto erstellen, das es mir ermöglicht, die Identität eines Benutzers anzunehmen. Ich denke, was ich möchte, ist so etwas wie ein Twitter Oauth1 Client. Ich habe versucht, GrantTypes.ResorceOwerPassword
den Client zu verwenden:
new Client
{
ClientId = "ServiceAccountAccess",
// no interactive user, use the clientid/secret for authentication
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
// secret for authentication
ClientSecrets =
{
new Secret("secret".Sha256())
},
// scopes that client has access to
AllowedScopes =
{
"api.full_access"
},
AlwaysIncludeUserClaimsInIdToken = true
}
Mein Benutzer:
new TestUser
{
SubjectId = "1",
Username = "alice",
Password = "password",
Claims = new []
{
new Claim("name", "Alice"),
new Claim("website", "https://alice.com")
}
},
Verbrauch:
var tokenClient = new TokenClient(disco.TokenEndpoint, "ServiceAccountAccess", "secret");
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("alice", "password", "api.full_access");
Nun dies tut Arbeit ich in der Lage bin einzuloggen. Das Problem, das ich habe, ist, dass ich keine Möglichkeit habe zu sehen, das ist Alice. Ich habe versucht, eine Benutzerinfo zu machen.
Userinfo rufen
// Get UserInfo
var client = new HttpClient();
client.SetBearerToken(tokenResponse.AccessToken);
var response = await client.GetAsync(disco.UserInfoEndpoint);
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.StatusCode);
}
else
{
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(JArray.Parse(content));
}
Ergebnisse:
Dies wird mit einem "Unauthorized verboten"
ich die dieser Benutzer muss wissen, zurück.