标签: microsoft-identity-web

如何在没有应用程序设置部分的情况下使用 AddMicrosoftIdentityWebApiAuthentication?

我正在 .NET 5 API 中实现 Azure Active Directory。我目前这个 API 在 .NET Core 2.2 上完美运行。

这是旧的工作代码:

services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
    .AddAzureADBearer(options =>
    {
         options.Instance = "https://login.microsoftonline.com/";
         options.Domain = backOfficeADDomain;
         options.TenantId = backOfficeADTenantId;
         options.ClientId = $"api://{backOfficeADAPIClientId}";
         options.ClientSecret = backOfficeADAPISecret;
    });
Run Code Online (Sandbox Code Playgroud)

但自从更新到 .NET 5 后,我收到以下警告:

“AzureADAuthenticationBuilderExtensions.AddAzureADBearer(AuthenticationBuilder, Action)”已过时:“此已过时,将在未来版本中删除。请改用 Microsoft.Identity.Web 中的 AddMicrosoftWebApiAuthentication。请参阅 https://aka.ms/ms-identity-web。

所以我尝试将其更新为:

services.AddMicrosoftIdentityWebApiAuthentication(_configuration, "AzureAd");
Run Code Online (Sandbox Code Playgroud)

appsettings.json 中的“AzureAd”部分似乎是传递凭据的唯一方法。如何手动输入实例、域、ClientId 等?我不使用 appsettings.json,所有数据都是从 AzureKeyVault 手动检索的。

谢谢你!

azure azure-active-directory microsoft-identity-platform microsoft-identity-web

10
推荐指数
2
解决办法
1万
查看次数

Microsoft Identity Web:更改重定向 Uri

我正在使用 .net 5 Identity Web Ui 访问 Microsoft Graph。在哪里可以配置我的重定向 URI?

我需要指定完整的 Uri,因为由于位于具有 SSL 卸载功能的负载均衡器后面,因此从 callbackUri 生成的 Uri 不正确。

这是我当前的配置服务部分

    services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
            .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
            .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
            .AddInMemoryTokenCaches();
Run Code Online (Sandbox Code Playgroud)

c# azure-active-directory azure-ad-msal microsoft-graph-api microsoft-identity-web

9
推荐指数
2
解决办法
6624
查看次数

用于托管 Wasm Blazor 和经典 Web 应用程序的 Azure B2C SSO

是否可以在以下场景中将 SSO 与 B2C 结合使用?

  1. 用于对 B2C 租户(本地帐户)中的用户进行身份验证的 ASP.Net Core Web 应用程序 (Razor Pages)。为简单起见,使用 Microsoft.Identity.Web:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
           .AddMicrosoftIdentityWebApp(Configuration.GetSection("web-AzureAdB2C"));
Run Code Online (Sandbox Code Playgroud)
  1. 托管 Blazor (wasm),客户端使用以下命令针对同一 B2C 租户进行身份验证:
builder.Services.AddMsalAuthentication(options =>
{
     builder.Configuration.Bind("app-AzureAdB2C", options.ProviderOptions.Authentication);
     options.ProviderOptions.DefaultAccessTokenScopes.Add("some-scope-for-server-api-access");
     options.ProviderOptions.LoginMode = "redirect";
});
Run Code Online (Sandbox Code Playgroud)

身份验证对于这两个应用程序都可以正常工作,但用户必须登录这两个应用程序。

这两个应用程序都使用相同的 B2C 用户流程。只需在 Azure 门户中为用户流启用 SSO 选项不会改变任何内容,用户仍然需要手动登录这两个应用程序。

我不确定它是否可以简单地完成(隐式与授权流程),但我将不胜感激任何指导。非常感谢。

asp.net-core microsoft-identity-web

6
推荐指数
0
解决办法
117
查看次数

Azure Key Vault 中的应用程序设置配置部分

我正在使用新库在 Net5 API 上实现 AAD 身份验证Micorosft.Identity.Web该库公开了一种方法,该方法仅接受IConfiguration带有如下所示部分的方法app.settings

Micorosft.Identity.WebStartup.cs 上的身份验证方法

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAd");
    ...
}
Run Code Online (Sandbox Code Playgroud)

应用程序设置.json

"AzureAd": {
    "Domain": "contoso.com",
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "00000000-0000-0000-0000-000000000000",
    "ClientId": "00000000-0000-0000-0000-000000000000"
 },
Run Code Online (Sandbox Code Playgroud)

现在的问题是,我正在使用 Azure 来部署此 API,当然所有这些敏感值都存储在 Key Vault 中。所以,我想找到一种方法来做到这一点:

services.AddMicrosoftIdentityWebApiAuthentication(new Configuration {
    Domain   = KeyVaultClient.GetSecret("domain"),
    Instance = KeyVaultClient.GetSecret("instance")
    TenantId = KeyVaultClient.GetSecret("tenant")
    ClientId = KeyVaultClient.GetSecret("client")
});
Run Code Online (Sandbox Code Playgroud)

同时,我没有找到在 KeyVault 创建这个“部分”的方法,所以我能够做到这一点

services.AddMicrosoftIdentityWebApiAuthentication(KeyVaultClient.GetSecret("azureadconfig"));
Run Code Online (Sandbox Code Playgroud)

如何存档这些选项之一,或者如果我将所有值都保存在 Key Vault 上,如何避免依赖 app.settings

编辑注释

我将 Key Vault 作为配置提供程序,但我不知道如何以部分方式返回这些值,因为方法期望

.net c# azure azure-keyvault microsoft-identity-web

4
推荐指数
1
解决办法
3869
查看次数

Dotnet 隔离的 Azure Functions - 如何访问 HttpContext

我有一个由 HTTP 调用触发的 dotnet 5 Azure 函数(dotnet-isolated)。

该函数将由不同的 Azure 函数应用程序调用,我想使用 Azure AD 保护目标并使用“客户端凭据”OAuth2 流。

我在以下位置找到了一个适合我的场景的优秀示例:Microsoft GitHub Sample

我的问题是,该示例使用 WebApi 应用程序作为服务。这可以访问 HttpContext 对象,使用 Microsft.Identity.Web 程序集中名为“ValidateAppRole”的扩展方法

我的 Azure 函数确实有一个 HttpRequestData 类型的参数。它有一个包含键值对的 headers 属性。这些密钥之一称为“授权”,其值是 Azure AD 提供的访问令牌。我已通过 jwt.ms 运行此令牌,并可以确认“角色”集合包含我需要验证的自定义角色。所以我知道所需的信息已经存在;我只是不知道如何以编程方式检查它。

由于点网隔离的 Azure 函数似乎无法访问 HttpContext 对象。如何进行与以下内容等效的检查?

HttpContext.ValidateAppRole("CustomRoleName");
Run Code Online (Sandbox Code Playgroud)

oauth-2.0 azure-active-directory azure-functions microsoft-identity-web

2
推荐指数
1
解决办法
5367
查看次数

EntityFramework Core自动迁移

在我的项目中,我有 2 个数据库:一个是我的自定义数据库,另一个是ApplicationDbContextMicrosoft Identity我的。

在我的Startup.cs我有这样的代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
        ApplicationDbContext db, MyContext dbPSC)
{
     // ...

    db.Database.EnsureCreated();
    db.Database.Migrate();

    dbPSC.Database.EnsureCreated();
    dbPSC.Database.Migrate();
}
Run Code Online (Sandbox Code Playgroud)

不知道什么时候有迁移的迁移吧?然后,我有两个错误:

  • 除了第一次之外,每次应用程序启动时,迁移都会ApplicationDbContext引发错误
  • 我的上下文的迁移似乎很好

使用的最佳做法是什么?是否需要打电话进行迁移ApplicationDbContext

更新

我已经删除了该Migration文件夹。然后,改变了Startup.cs类似

public void Configure(IApplicationBuilder app, IWebHostEnvironment env,
        ApplicationDbContext db, MyContext dbPSC)
{
     // ...

    db.Database.EnsureCreated();
    dbPSC.Database.EnsureCreated();
}
Run Code Online (Sandbox Code Playgroud)

但是当应用程序启动时,它根本不创建任何表。AuditDbContext是因为我使用Audit.net

public class MyContext : AuditDbContext
{
    public MyContext(DbContextOptions<MyContext> options) : base(options) { }

    public DbSet<Message> Messages { …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core asp.net-core microsoft-identity-web

1
推荐指数
1
解决办法
4387
查看次数

Microsoft.Identity.Web OnTokenValidated 事件似乎与异步不能很好地配合

我一直在努力解决我附加到 OnTokenValidated 的 Func 没有做它应该做的事情。

经过多次尝试不同的事情后:

services.Configure<MicrosoftIdentityOptions>(options =>
{
    options.Events ??= new OpenIdConnectEvents();
    options.Events.OnTokenValidated += context =>
    {
        context.Principal.AddIdentity(new ClaimsIdentity(new List<Claim> {new Claim("Foo", "Bar")}));
        return Task.CompletedTask;
    };
}
Run Code Online (Sandbox Code Playgroud)

按预期工作,并且将值为“Bar”的声明“Foo”添加到身份中。

但是,一旦我在代码中等待任务并使 func 异步,附加声明就不会添加到登录的身份中:

services.Configure<MicrosoftIdentityOptions>(options =>
{
    options.Events ??= new OpenIdConnectEvents();
    options.Events.OnTokenValidated += async context =>
    {
        var someService = context.HttpContext.RequestServices.GetRequiredService<ISomeService>();
        var someValue = await someService.SomeMethod();
        context.Principal.AddIdentity(new ClaimsIdentity(new List<Claim> {new Claim("Foo", "Bar")}));
    };
}
Run Code Online (Sandbox Code Playgroud)

不起作用。需要明确的是,它没有错误,但是在该方法完成后,身份上不存在附加声明......

据我所知,通过消除各种事情,等待导致了它的崩溃,但 OnTokenValidated 的定义是:

Func<TokenValidatedContext,Task> OnTokenValidated
Run Code Online (Sandbox Code Playgroud)

所以似乎期望处理程序是异步的?


更新:2022-02-07 更进一步:

OnTicketReceived = ctx =>
{
    throw new AuthenticationException("Sorry, you …
Run Code Online (Sandbox Code Playgroud)

asp.net-core microsoft-identity-web

0
推荐指数
1
解决办法
2868
查看次数