当前位置: 首页 > 知识库问答 >
问题:

如何保护使用Azure广告B2C的Blazor Wasm应用程序访问的Azure功能?

晋承运
2023-03-14

场景:我有一个使用B2C身份验证的Blazor wasm应用程序,需要调用HTTP触发的Azure函数。保护Azure函数的最佳方法是什么,这样只有Blazor应用程序和/或经过身份验证的用户才能调用该函数?

到目前为止,我知道如何用B2C保护Blazor应用程序(显然很傻!)我还能够为Azure函数添加B2C身份验证,并通过验证jwt令牌来保护调用。但我不清楚这两部分该如何组合在一起。

共有1个答案

蒙奇
2023-03-14

如果您想调用Azure AD B2C投影的Azure函数,请参考以下步骤

>

  • 为Azure功能配置Azure AD B2C

    >

  • 创建Azure B2C应用程序。

    获取您的B2C用户流/策略的元数据URL。记下这个URL。

    可以从运行用户流页面获得。

    其格式类似于https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/v2.0/。well-known/openid-configuration?p={policy}

    转到您的函数=>身份验证/授权。

    设置以下内容

    • 应用程序服务身份验证:在
    • 未经身份验证时要采取的操作:使用Azure AD登录
    • 身份验证提供程序:Azure AAD
    • 管理模式:高级
    • 客户端Id:{步骤4中的应用程序Id}
    • 颁发者URL:{来自步骤6的URL}
    • 允许的访问群体:{步骤3中的应用程序Id URL}

    1. Create
       dotnet new blazorwasm -au IndividualB2C --aad-b2c-instance "{AAD B2C INSTANCE}" --client-id "{CLIENT ID}" --domain "{TENANT DOMAIN}" -o {APP NAME} -ssp "{SIGN UP OR SIGN IN POLICY}"
      
        null
      
          using Microsoft.AspNetCore.Components;
          using Microsoft.AspNetCore.Components.WebAssembly.Authentication;
          
          public class CustomAuthorizationMessageHandler : AuthorizationMessageHandler
          {
              public CustomAuthorizationMessageHandler(IAccessTokenProvider provider, 
                  NavigationManager navigationManager)
                  : base(provider, navigationManager)
              {
                  ConfigureHandler(
                      authorizedUrls: new[] { "<your function app url>" },
                      scopes: new[] { "<the function app  API scope your define>" });
              }
          }
      
        null
      public static async Task Main(string[] args)
              {
                  var builder = WebAssemblyHostBuilder.CreateDefault(args);
                  builder.RootComponents.Add<App>("app");
                   // register CustomAuthorizationMessageHandler 
                  builder.Services.AddScoped<CustomAuthorizationMessageHandler>();
                  // configure httpclient
                  // call the following code please add packageMicrosoft.Extensions.Http 3.1.0
                  builder.Services.AddHttpClient("ServerAPI", client =>
                    client.BaseAddress = new Uri("<your function app url>"))
                          .AddHttpMessageHandler<CustomAuthorizationMessageHandler>();
                  // register the httpclient
                  builder.Services.AddScoped(sp => sp.GetRequiredService<IHttpClientFactory>()
                   .CreateClient("ServerAPI"));
                  // configure Azure AD auth
                  builder.Services.AddMsalAuthentication(options =>
                  {
                      builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
                      options.ProviderOptions.DefaultAccessTokenScopes.Add("<the function app  API scope your define>");
      
      
                  });
      
                  await builder.Build().RunAsync();
              }
      
      • 调用API
       @page "/fetchdata"
              @using Microsoft.AspNetCore.Components.WebAssembly.Authentication
              @inject HttpClient Http
      
              <h1>Call Azure Function</h1>
      
               <p>This component demonstrates fetching data from the server.</p>
      
               <p>Result: @forecasts</p>
      
                <button class="btn btn-primary" @onclick="CallFun">Call Function</button>
      
                @code {
                    private string forecasts;
      
                    protected async Task CallFun()
                    {
                      forecasts = await Http.GetStringAsync("api/http");
                    }
      
      
                 }
      

  •  类似资料:
    • 我有几个Azure Functions,我想使用Azure AD对其应用身份验证。在用户模拟身份验证方面,我已经成功做到了这一点。但不幸的是,我无法从尝试访问Azure Functions的守护程序应用程序中获得同样的工作。 我的守护程序应用程序在Azure AD中注册,并公开应用程序范围。基本上,我有其他构建为应用程序服务的API,可以从守护程序应用程序成功地进行身份验证。我为Azure功能应用

    • 我需要在旧的WEBFORMS应用程序(不是MVC应用程序)中实现Azure AD b2c。我按照说明进行操作,并通过运行此示例验证Azure AD B2C配置。之后,我将所有适用的NuGet添加到我的旧WEBFORMS应用程序中,并复制相应的代码。我在调用质询方法时遇到了一个异常。当我查看网络跟踪时,我看到了一个额外的“?”在客户端id之前的身份验证URL上 由样例生成的URL是: "https:

    • 我将Spring Boot 2.2.0与azure-active-directory-b2c-Spring-Boot-starter一起使用。我设法用它(按照他们的教程)获得了一个Thymeleaf网页。现在,我想要一个REST API,它以同样的方式受到保护,因为实际的应用程序将是一个移动应用程序,它对我的Spring Boot后端进行REST调用。 我已经找到了如何使用密码授权流获取令牌的方法

    • 问题内容: 我有一个Web应用程序,这是React,并且我已经为该Web应用程序本身配置了Azure AD身份验证。其100%客户端站点应用程序,无服务器端组件。 我使用了这个组件:https : //github.com/salvoravida/react-adal 我的代码如下:adalconfig.js index.js dashapp.js 在此之前,一切正常,当用户未通过身份验证时,将其

    • Azure AD B2C租户 域名:myTenantName.onmicrosoft.com 应用程序: 应用程序A-API WebApp/API:是 允许隐式流:是 回复Url:https://myazurefunsapi.azurewebsites.net/.auth/login/aad/callback 应用程序ID:https://mytenantname.onmicrosoft.com/

    • 使用以下方法将用户添加到角色中没有问题 我收到“错误的请求”,在Fiddler中“一个或多个属性无效”。没有额外的信息。