Een web-app waarmee web-API's worden aangeroepen: een web-API aanroepen
Nu u een token hebt, kunt u een beveiligde web-API aanroepen. Meestal roept u een downstream-API aan vanaf de controller of pagina's van uw web-app.
Een beveiligde web-API aanroepen
Het aanroepen van een beveiligde web-API is afhankelijk van uw taal en het framework van keuze:
Wanneer u Microsoft.Identity.Web gebruikt, hebt u drie gebruiksopties voor het aanroepen van een API:
- Optie 1: Microsoft Graph aanroepen met de Microsoft Graph SDK
- Optie 2: een downstream-web-API aanroepen met de helperklasse
- Optie 3: een downstream-web-API aanroepen zonder de helperklasse
Optie 1: Microsoft Graph aanroepen met de SDK
In dit scenario roept u Microsoft Graph aan door het NuGet-pakket Microsoft.Identity.Web.GraphServiceClient toe te voegen, inclusief .AddMicrosoftGraph()
in Startup.cs zoals opgegeven in de codeconfiguratie. Vervolgens kunt u de GraphServiceClient
controller of paginaconstructor rechtstreeks injecteren om deze in de acties te gebruiken. Op de volgende voorbeeldpagina van Razor wordt de foto van de aangemelde gebruiker weergegeven.
[Authorize]
[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public class IndexModel : PageModel
{
private readonly GraphServiceClient _graphServiceClient;
public IndexModel(GraphServiceClient graphServiceClient)
{
_graphServiceClient = graphServiceClient;
}
public async Task OnGet()
{
var user = await _graphServiceClient.Me.GetAsync();
try
{
using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
{
byte[] photoByte = ((MemoryStream)photoStream).ToArray();
ViewData["photo"] = Convert.ToBase64String(photoByte);
}
ViewData["name"] = user.DisplayName;
}
catch (Exception)
{
ViewData["photo"] = null;
}
}
}
Zie ASP.NET Core-web-app die Microsoft Graph aanroept voor een volledig voorbeeld.
Optie 2: een downstream-web-API aanroepen met de helperklasse
U wilt een andere web-API dan Microsoft Graph aanroepen. In dat geval voegt AddDownstreamApi
u Startup.cs toe zoals opgegeven in de codeconfiguratie en kunt u rechtstreeks een IDownstreamApi
service in uw controller of paginaconstructor injecteren en gebruiken in de acties:
[Authorize]
[AuthorizeForScopes(ScopeKeySection = "TodoList:Scopes")]
public class TodoListController : Controller
{
private IDownstreamApi _downstreamApi;
private const string ServiceName = "TodoList";
public TodoListController(IDownstreamApi downstreamApi)
{
_downstreamApi = downstreamApi;
}
public async Task<ActionResult> Details(int id)
{
var value = await _downstreamApi.CallApiForUserAsync(
ServiceName,
options =>
{
options.RelativePath = $"me";
});
return View(value);
}
}
De CallWebApiForUserAsync
heeft ook sterk getypeerde algemene overschrijvingen waarmee u een object rechtstreeks kunt ontvangen. Met de volgende methode wordt bijvoorbeeld een Todo
-exemplaar ontvangen. Dat is een sterk getypte weergave van de JSON die wordt geretourneerd door de web-API.
// GET: TodoList/Details/5
public async Task<ActionResult> Details(int id)
{
var value = await _downstreamApi.CallApiForUserAsync<object, Todo>(
ServiceName,
null,
options =>
{
options.HttpMethod = HttpMethod.Get;
options.RelativePath = $"api/todolist/{id}";
});
return View(value);
}
Zie ASP.NET Core-web-app die een API aanroept voor een volledig voorbeeld
Optie 3: een downstream-web-API aanroepen zonder de helperklasse
U hebt besloten handmatig een token te verkrijgen met behulp van de service IAuthorizationHeaderProvider
en u moet het token nu gebruiken. In dat geval is de volgende code een vervolg van de voorbeeldcode die wordt weergegeven in Een web-app die web-API's aanroept: een token verkrijgen voor de app. De code wordt aangeroepen in de acties van de web-app-controllers.
Nadat u het token hebt verkregen, gebruikt u het als Bearer-token om de downstream-API aan te roepen, in dit geval Microsoft Graph.
public async Task<IActionResult> Profile()
{
// Acquire the access token.
string[] scopes = new string[]{"user.read"};
string authorizationHeader = await IAuthorizationHeaderProvider.GetAuthorizationHeaderForUserAsync(scopes);
// Use the access token to call a protected web API.
HttpClient httpClient = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", authorizationHeader);
var response = await httpClient.GetAsync($"{webOptions.GraphApiUrl}/beta/me");
if (response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
dynamic me = JsonConvert.DeserializeObject(content);
ViewData["Me"] = me;
}
return View();
}
Notitie
U kunt hetzelfde principe gebruiken om elke andere web-API aan te roepen.
De meeste Azure-web-API's bieden een SDK om het aanroepen van de API te vereenvoudigen, zoals het geval is bij Microsoft Graph.
Volgende stappen
Meer informatie door een ASP.NET Core-web-app te bouwen waarmee gebruikers worden aangemeld in de volgende reeks meerdelige zelfstudies
Voorbeelden van web-apps van Microsoft Identity Platform verkennen