Nye delegeringer
Hvordan delegere nye rettigheter til en person.
I denne leksjonen vil vi vise hvordan man delegerer nye rettigheter til en person over REST. Leksjonen bygger på modeller og konverterere vil definerte i tidligere leksjoner. Koden vi viser i denne leksjonen kan ses i sin helhet i AuthorizationHandler.cs i det tilhørende C#/.Net prosjektet.
POST authorization/Delegations
For å delegere nye roller og rettigheter til en aktør over REST skal man bruke POST api/{who}/authorization/Delegations.
RightHolder modellen som skal brukes som body i kallet skal inneholde følgende:
- Rettighetsmottakers identitet i form av fødselsnummer og etternavn.
SocialSecurityNumber
ogLastName
- Hvilke roller og rettigheter som skal gis.
_embedded.roles[]
og_embedded.rights[]
Under ser vi hvordan en delegering av Lese- og Skrive-tilgang til en tjeneste til vår testperson ser ut.
Merk at hver operasjon eller Action
som det skal gis tilgang til tilsvarer et nytt innslag i rights[]
listen.
For å finne ut hvilke operasjoner som gjelder for en gitt tjeneste kan man se på RoleRequirement
for tjenesten.
Det er tilgjengelig over REST via metadata-endepunktet:
GET api/metadata/rolerequirements
med ServiceCode
og ServiceEditionCode
som parametre.
For de aller fleste tjenester i Altinn er det disse kombinasjonene av operasjoner som gjelder:
- Read, Write, ArchiveRead, ArchiveDelete
- Read, Write, ArchiveRead, ArchiveDelete, Sign
- Access
POST api/my/authorization/Delegations HTTP/1.1
Host: https://tt02.altinn.no
Bearer: <Altinn token>
ApiKey: <API-nøkkel>
Content-Type: application/hal+json
{
"LastName": "HEIS",
"SocialSecurityNumber": "26899299344",
"_embedded":{
"rights":[
{
"ServiceCode": "3225",
"ServiceEditionCode": 536,
"Action": "Read"
},
{
"ServiceCode": "3225",
"ServiceEditionCode": 536,
"Action": "Write"
}
]
}
}
Definere rettigheten i RightHolder
Her kommer vi i koden til å referere til NewDelegations i RightHolder
.
I det tilhørende C#/.Net prosjektet har vi hard-kodet Read
og Write
som operasjoner, men en forbedret versjon burde tatt inn operasjonene som argument til PostDelegations()
.
public async Task<string> PostDelegations(string altinnToken,
string ssn,
string lastName,
Service service)
{
NewDelegations rightsToDelegate = new NewDelegations
{
Rights = new List<Right>()
};
rightsToDelegate.Rights.Add(new Right
{
ServiceCode = service.ServiceCode,
ServiceEditionCode = service.ServiceEditionCode,
Action = "Read"
});
rightsToDelegate.Rights.Add(new Right
{
ServiceCode = service.ServiceCode,
ServiceEditionCode = service.ServiceEditionCode,
Action = "Write"
});
RightHolder delegations = new RightHolder {
SocialSecurityNumber = ssn,
LastName = lastName,
NewDelegations = rightsToDelegate
};
RightHolder
brukes så som body i delegeringskallet.
try
{
var response = await "https://tt02.altinn.no"
.AppendPathSegment("api/my/authorization/Delegations/")
.WithOAuthBearerToken(altinnToken)
.WithHeader("ApiKey", _apiKey)
.WithHeader("Content-Type", "application/hal+json")
.PostStringAsync(
rightHolderString
)
.ReceiveString();
return response;
}
catch (FlurlHttpException ex)
{
var status = ex.Call.Response.StatusCode;
var message = await ex.GetResponseStringAsync();
Forventet respons for dette kallet er 201 Created
.