1
0
mirror of https://github.com/tomasvarg/OwinWebApiTest.git synced 2026-03-01 08:28:49 +00:00

Added custom props support to the token-granted response

This commit is contained in:
Tomas Varga 2018-01-09 06:58:46 +01:00
parent 099d1c2aa8
commit aee4bd408e

View File

@ -39,8 +39,8 @@ namespace OwinWebApiTest.Providers
dynamic args = await context.Request.ReadFormAsync();
if (string.IsNullOrEmpty(args["ticket"]) || string.IsNullOrEmpty(args["service"])) {
context.SetError("invalid_grant", "No CAS ticket or service URL sent.");
context.Rejected();
context.SetError("invalid_grant", "No CAS ticket or service URL sent.");
return;
}
@ -59,13 +59,17 @@ namespace OwinWebApiTest.Providers
//var acda = new AccessControlDA();
//var ac = acda.GetAccessControl(res.success.user);
var ac = new { userId = args["username"], saveAllowed = true, saveAllUnits = true };
var ac = new { userId = res.success.user, canRead = true, canSave = true };
if (ac == null) {
context.Rejected();
context.SetError("invalid_grant", $"User '{res.success.user}' not found");
return;
}
ClaimsIdentity identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, res.success.user));
identity.AddClaim(new Claim(ClaimTypes.Role, "User"));
//identity.AddClaim(new Claim("user_name", context.UserName));
//identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim(ClaimTypes.Role, "Admin"));
// Identity info will be encoded into an Access ticket as a result of this call:
//context.Validated(identity);
@ -79,6 +83,17 @@ namespace OwinWebApiTest.Providers
context.Validated(ticket);
}
// needed to get the custom props as a part of the token-granted response
public override Task TokenEndpoint(OAuthTokenEndpointContext context)
{
foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
{
context.AdditionalResponseParameters.Add(property.Key, property.Value);
}
return Task.FromResult<object>(null);
}
private async Task<CasServiceValidationResponse> ValidateCasTicket(string ticket, string service)
{
var requestUri = WebUtilities.AddQueryString(casValidationUrl, new Dictionary<string, string>() {