场景:我有一个使用B2C身份验证的Blazor wasm应用程序,需要调用HTTP触发的Azure函数。保护Azure函数的最佳方法是什么,这样只有Blazor应用程序和/或经过身份验证的用户才能调用该函数?
到目前为止,我知道如何用B2C保护Blazor应用程序(显然很傻!)我还能够为Azure函数添加B2C身份验证,并通过验证jwt令牌来保护调用。但我不清楚这两部分该如何组合在一起。
如果您想调用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}
。
转到您的函数=>身份验证/授权。
设置以下内容
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}"
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>" });
}
}
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();
}
@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中“一个或多个属性无效”。没有额外的信息。