Dricks

  • Registrera ett program med Microsoft Entra ID.

Registrera app

  1. Logga in på Azure-portalen.

  2. Om du har åtkomst till flera klienter använder du filtret Katalog + prenumeration på den översta menyn och väljer den klientorganisation där appen är registrerad.

  3. Sök efter och markera Microsoft Entra ID.

  4. Under Hantera, välj Appregistreringar.

    • Du kan ändra detta senare.
    • Under kontotyper som stöds, välj Konton i vilken organisationskatalog som helst (alla Microsoft Entra ID-kataloger – med flera organisationer i samma installation) och personliga Microsoft-konton (t.ex. Skype, Xbox).
  5. Välj Registrera.

  6. Ange följande detaljerad information:

    • Omfattningsnamn
    • Visningsnamn för administratörsmedgivande
    • Beskrivning av administratörsmedgivande
    • Visningsnamn för användarmedgivande
    • Beskrivning av användarmedgivande
    • Tillstånd: Aktiverad
  7. Välj Översikt.

Öppna Visual Studio och välj FilNytt projekt.

  1. Högerklicka på projektet och välj TodoAppService.NET6Hantera NuGet-paket….

  2. Screenshot of adding the M S A L NuGet in Visual Studio.

  3. Öppna Program.cs. Lägg till följande using-instruktioner överst i filen.

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddMicrosoftIdentityWebApi(builder.Configuration);
builder.Services.AddAuthorization();
app.UseAuthentication();
app.UseAuthorization();

Nu bör filen Program.cs se ut så här:

using Microsoft.AspNetCore.Datasync;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
using TodoAppService.NET6.Db;
  
var builder = WebApplication.CreateBuilder(args);
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
  
if (connectionString == null)
{
  throw new ApplicationException("DefaultConnection is not set");
}
  
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  .AddMicrosoftIdentityWebApi(builder.Configuration);
builder.Services.AddAuthorization();
builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(connectionString));
builder.Services.AddDatasyncControllers();
  
var app = builder.Build();
  
// Initialize the database
using (var scope = app.Services.CreateScope())
{
  var context = scope.ServiceProvider.GetRequiredService<AppDbContext>();
  await context.InitializeDatabaseAsync().ConfigureAwait(false);
}
  
// Configure and run the web service.
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
  1. Ditt flöde bör se ut så här:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Datasync;
using Microsoft.AspNetCore.Datasync.EFCore;
using Microsoft.AspNetCore.Mvc;
using TodoAppService.NET6.Db;

namespace TodoAppService.NET6.Controllers
{
  [Authorize]
  [Route("tables/todoitem")]
  public class TodoItemController : TableController<TodoItem>
  {
    public TodoItemController(AppDbContext context)
      : base(new EntityTableRepository<TodoItem>(context))
    {
    }
  }
}
  1. Lägg sedan till följande HTML-kod
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "ClientId": "<client-id>",
    "TenantId": "common"
  },

Ersätt värdet för med det program-ID som du registrerade. Det kompletta flödet bör se ut så här:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "ClientId": "<client-id>",
    "TenantId": "common"
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=TodoApp;Trusted_Connection=True"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*"
}

  1. Högerklicka på AppBackend-projektet och välj sedan Publicera.
  2. Längst uppe till höger på LUIS-webbplatsen väljer du knappen Publish (Publicera).

Öppna en webbläsare

Screenshot of the browser showing an error.

Lägga till ett program för intern klient

    • Ange namn för appregistreringen.
    • Välj Konton i vilken organisationskatalog som helst (alla Azure AD kataloger – med flera organisationer i samma installation) och personliga Microsoft-konton (t.ex. Skype, Xbox).
      • Ange URL:en quickstart://auth.
  1. Välj Registrera.

  2. Välj API-behörigheterLägg till en behörighet.

  3. Screenshot of the scope registration in the Azure portal.

  4. Välj Spara ändringar längst ner på sidan.

  5. Välj Översikt.

  1. Högerklicka på projektet och välj Hantera NuGet-paket….

  2. Välj fliken Bläddra.

  3. Skriv i sökrutan och tryck på Retur.

  4. Screenshot of selecting the MSAL NuGet in Visual Studio.

Öppna filen TodoApp.Data från projektet Constants.cs.

  public static class Constants
  {
      /// <summary>
      /// The base URI for the Datasync service.
      /// </summary>
      public static string ServiceUri = "https://demo-datasync-quickstart.azurewebsites.net";

      /// <summary>
      /// The application (client) ID for the native app within Microsoft Entra ID
      /// </summary>
      public static string ApplicationId = "<client-id>";

      /// <summary>
      /// The list of scopes to request
      /// </summary>
      public static string[] Scopes = new[]
      {
          "<scope>"
      };
  }

I approjektet App.xaml.cs öppnar du filen TodoApp.UWP.

Lägg till följande using-instruktioner överst i filen.

using Microsoft.Datasync.Client;
using Microsoft.Identity.Client;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

Ersätt innehållet i metoden TodoService med följande kod:

public App()
{
    InitializeComponent();
    Suspending += OnSuspending;

    IdentityClient = GetIdentityClient();
    TodoService = new RemoteTodoService(GetAuthenticationToken);
}

public static IPublicClientApplication IdentityClient { get; set; }

public ITodoService TodoService { get; }

public IPublicClientApplication GetIdentityClient()
{
    var identityClient = PublicClientApplicationBuilder.Create(Constants.ApplicationId)
        .WithAuthority(AzureCloudInstance.AzurePublic, "common")
        .WithUseCorporateNetwork(false)
        .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
        .Build();
    return identityClient;
}

public async Task<AuthenticationToken> GetAuthenticationToken()
{
    var accounts = await IdentityClient.GetAccountsAsync();
    AuthenticationResult result = null;
    bool tryInteractiveLogin = false;

    try
    {
        result = await IdentityClient
            .AcquireTokenSilent(Constants.Scopes, accounts.FirstOrDefault())
            .ExecuteAsync()
            .ConfigureAwait(false);
    }
    catch (MsalUiRequiredException)
    {
        tryInteractiveLogin = true;
    }
    catch (Exception ex)
    {
        Debug.WriteLine($"MSAL Silent Error: {ex.Message}");
    }

    if (tryInteractiveLogin)
    {
        try
        {
            result = await IdentityClient
                .AcquireTokenInteractive(Constants.Scopes)
                .ExecuteAsync()
                .ConfigureAwait(false);
        }
        catch (Exception ex)
        {
            Debug.WriteLine($"MSAL Interactive Error: {ex.Message}");
        }
    }

    return new AuthenticationToken
    {
        DisplayName = result?.Account?.Username ?? "",
        ExpiresOn = result?.ExpiresOn ?? DateTimeOffset.MinValue,
        Token = result?.AccessToken ?? "",
        UserId = result?.Account?.Username ?? ""
    };
}

Testa appen

Screenshot of the Microsoft Entra consent request.

Nästa steg

Ytterligare läsning

  • Snabbstart: Hämta en token och anropa Microsoft Graph API från en Windows-skrivbordsapp