Megosztás a következőn keresztül:


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 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