Webes API-kat hívó webalkalmazás: Webes API meghívása
Most, hogy rendelkezik egy jogkivonattal, meghívhat egy védett webes API-t. Általában egy alsóbb rétegbeli API-t hív meg a webalkalmazás vezérlőjéről vagy lapjairól.
Védett webes API meghívása
Védett webes API meghívása a választott nyelvtől és keretrendszertől függ:
A Microsoft.Identity.Web használata esetén három használati lehetőség közül választhat az API meghívásához:
- 1. lehetőség: A Microsoft Graph meghívása a Microsoft Graph SDK-val
- 2. lehetőség: Alsóbb rétegbeli webes API meghívása a segédosztálysal
- 3. lehetőség: Alsóbb rétegbeli webes API meghívása segédosztály nélkül
1. lehetőség: A Microsoft Graph meghívása az SDK-val
Ebben a forgatókönyvben a Microsoft Graph meghívásához adja hozzá a Microsoft.Identity.Web.GraphServiceClient NuGet-csomagot, és a .AddMicrosoftGraph()
kódkonfigurációban megadott Startup.cs is. Ezután közvetlenül injektálhatja a vezérlőbe vagy a GraphServiceClient
lapkonstruktorba, hogy a műveletekben használhassa. Az alábbi Razor-példalap a bejelentkezett felhasználó fényképét jeleníti meg.
[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;
}
}
}
A teljes mintaért tekintse meg ASP.NET Microsoft Graphot hívó Core-webalkalmazást.
2. lehetőség: Alsóbb rétegbeli webes API meghívása a segédosztálysal
A Microsoft Graphtól eltérő webes API-t szeretne meghívni. Ebben az esetben a kódkonfigurációban megadott Startup.cs adja hozzá AddDownstreamApi
, és közvetlenül injektálhat egy IDownstreamApi
szolgáltatást a vezérlőbe vagy a lapkonstruktorba, és használhatja azt a műveletekben:
[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);
}
}
A CallWebApiForUserAsync
szintén erősen gépelt általános felülbírálások lehetővé teszik, hogy közvetlenül fogadjon egy objektumot. A következő metódus például egy példányt Todo
kap, amely a webes API által visszaadott JSON erősen beírt ábrázolása.
// 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);
}
Teljes minta : ASP.NET Core-webalkalmazás, amely API-t hív meg
3. lehetőség: Alsóbb rétegbeli webes API meghívása segédosztály nélkül
Úgy döntött, hogy manuálisan szerez be egy jogkivonatot a IAuthorizationHeaderProvider
szolgáltatás használatával, és most már használnia kell a jogkivonatot. Ebben az esetben a következő kód folytatja a webes API-kat hívó webalkalmazásban látható példakódot: Jogkivonat beszerzése az alkalmazáshoz. A kódot a webalkalmazás-vezérlők műveletei hívják meg.
A jogkivonat beszerzése után használja tulajdonosi jogkivonatként az alsóbb rétegbeli API, jelen esetben a Microsoft Graph meghívásához.
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();
}
Feljegyzés
Ugyanezt az elvet használhatja bármely webes API meghívásához.
A legtöbb Azure webes API olyan SDK-t biztosít, amely leegyszerűsíti az API meghívását, ahogyan a Microsoft Graph esetében is.
Következő lépések
További információ egy ASP.NET Core-webalkalmazás létrehozásával, amely bejelentkezik a felhasználókba az alábbi többrészes oktatóanyag-sorozatban
Microsoft Identitásplatform webalkalmazás-minták áttekintése