我使用Blazor WASM客户端,而不是使用WPF应用程序。
我将令牌添加到.net核心API的传出请求中,但始终收到401。
Blazor进行了很好的身份验证,并获得了令牌,似乎工作正常,但是:
如果我从上面提到的链接中运行示例并解码令牌,则可以在令牌中看到正确的AUD和SCP。因此,可能与我在Blazor中的配置有关?
在Blazor中配置
// AD authentication
builder.Services.AddMsalAuthentication(options =>
{
builder.Configuration.Bind("AzureAd", options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add("api://xxx-xxxx-xxxx-xxxx/access_as_user");
});
builder.Services
.AddHttpClient<IApiClient, ApiClient>(client => client.BaseAddress = _baseUri)
.AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
回复
Bearer error="invalid_token", error_description="The audience '63ee4227-xxxx-xxxx-xxxx' is invalid"
观众GUID是我的Blazor应用注册的clientID
Startup.cs中的代码
...
services.AddProtectedWebApi(Configuration)
.AddInMemoryTokenCaches();
...
...
app.UseAuthentication();
app.UseAuthorization();
...
有什么主意吗?
答案 0 :(得分:0)
当我学习使用Blazor WebAssembly时,我遵循了this tutorial,它的功能非常相似,而且您不必尝试从WPF转换任何代码,对您来说可能更容易实现。
不过,要尝试的一件事就是更改此设置:
foreach($arr as $el){
$ht .= "<div class='atitle'
//foreach column in users $ht .= "data-" . column_name = column_value
$ht .= ">" . $el['title'] . "</div>\n";
}
对此:
options.ProviderOptions.DefaultAccessTokenScopes.Add("api://xxx-xxxx-xxxx-xxxx/access_as_user");
在我的应用程序中,我正在调用两个API终结点,一个终结点托管在Blazor应用程序的同一个域中,另一个终结点位于单独的域中。请求外部域令牌时,必须使用 api:// 前缀。但是,对于同一域,必须将其排除。