Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: Dzierżawcy siły roboczej Biały okrąg z szarym symbolem X. dzierżawcy zewnętrzni (White circle with a gray X symbol.dowiedz się więcej)
Teraz, gdy masz token, możesz wywołać chroniony internetowy interfejs API. Zazwyczaj wywołujesz podrzędny interfejs API z kontrolera lub stron aplikacji webowej.
Wywołaj chroniony internetowy interfejs API
Wywoływanie chronionego internetowego interfejsu API zależy od wybranego języka i platformy:
W przypadku korzystania z aplikacji Microsoft.Identity.Web dostępne są trzy opcje użycia do wywoływania interfejsu API:
- Opcja 1. Wywoływanie programu Microsoft Graph przy użyciu zestawu Microsoft Graph SDK
- Opcja 2. Wywoływanie podrzędnego internetowego interfejsu API za pomocą klasy pomocniczej
- Opcja 3. Wywoływanie podrzędnego internetowego interfejsu API bez klasy pomocniczej
Opcja 1. Wywoływanie programu Microsoft Graph za pomocą zestawu SDK
W tym scenariuszu wywołujesz Microsoft Graph, dodając pakiet NuGet Microsoft.Identity.Web.GraphServiceClient i uwzględniając .AddMicrosoftGraph()
w Startup.cs, zgodnie z sekcją Konfiguracja kodu. Następnie możesz bezpośrednio wstrzyknąć element GraphServiceClient
do swojego kontrolera lub konstruktora strony, aby wykorzystać go w działaniach. Poniższa przykładowa strona Razor wyświetla zdjęcie zalogowanego użytkownika.
[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;
}
}
}
Aby uzyskać pełny przykład, zobacz aplikację internetową ASP.NET Core, która wywołuje Microsoft Graph.
Opcja 2. Wywoływanie podrzędnego internetowego interfejsu API za pomocą klasy pomocniczej
Chcesz wywołać internetowy interfejs API inny niż Microsoft Graph. Można w takim przypadku dodać AddDownstreamApi
w Startup.cs, jak określono w Konfiguracji kodu, i można bezpośrednio wstrzyknąć usługę IDownstreamApi
w kontrolerze lub konstruktorze strony i użyć jej w akcjach:
[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);
}
}
Dodatkowo, komponent CallWebApiForUserAsync
posiada silnie typizowane generyczne przesłonięcia, które umożliwiają bezpośrednie pobieranie obiektu. Na przykład następująca metoda odbiera instancję Todo
, która jest silnie typizowaną reprezentacją kodu JSON zwracanego przez API sieciowe.
// 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);
}
Aby zobaczyć pełny przykład, zajrzyj do aplikacji internetowej ASP.NET Core, która wywołuje interfejs API.
Opcja 3. Wywoływanie podrzędnego internetowego interfejsu API bez klasy pomocniczej
Zdecydowałeś się ręcznie uzyskać token przy użyciu usługi IAuthorizationHeaderProvider
, a teraz musisz użyć tego tokenu. W takim przypadku poniższy kod kontynuuje przykładowy kod pokazany w aplikacji internetowej, która wywołuje internetowe interfejsy API: Uzyskiwanie tokenu dla aplikacji. Kod jest wywoływany w akcjach kontrolerów aplikacji internetowej.
Po uzyskaniu tokenu użyj go jako tokenu elementu nośnego, aby wywołać podrzędny interfejs API, w tym przypadku program 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();
}
Uwaga
Tę samą zasadę można użyć do wywoływania dowolnego internetowego interfejsu API.
Większość internetowych interfejsów API platformy Azure udostępnia zestaw SDK, który upraszcza wywoływanie interfejsu API, tak jak w przypadku programu Microsoft Graph.