我是Blazor和Azure Ad的新手(或者实际上是生成中的身份验证(,我想从Visual Studio 2022中向导生成的应用程序中设置一个简单的基本应用程序。我能够启动并运行身份验证部分,但无法访问API。我得到401-未经授权和www认证在响应头中是:Bearer error=";invalid_token";,error_description=";签名无效";
以下是我所做的:
- 在Visual Studio 2022中,使用Blazor WebAssembly应用程序封装一个新项目
- 保持Framework为.Net 6.0(长期支持(
- 将身份验证类型更改为Microsoft身份验证平台
- 保持"为HTTPS配置">
- 检查"ASP.Net核心托管">
- 关闭"渐进式Web应用程序">
- 我通过单击"完成"按钮确认要安装"dotnet msidentity工具">
- 在Azure"应用程序注册"部分,我选择顶部的"新注册">
- 我输入"MyBlazorApp1"作为名称
- 选择"仅限个人Microsoft帐户"作为支持的类型
- 将重定向URI设置为SPA和
https://localhost:7095/authentication/login-callback
- 单击左下角的"注册"按钮
- 已填充字段的屏幕截图
- 创建的AzureAd应用程序的屏幕截图
- 在BlazorApp1.Client/wwwroot/appsettings.json中:
- 由消费者替换22222222-222-2222-222222222(因此Authority现在https://login.microsoftonline.com/consumers)
- 将ClientId设置为客户端id(上面截屏中的1(
- 在BlazorApp1.Server/appsettings.json中:
- 将域设置为"Azure Active Directory"概览页面中的"主域">
- 将TenantId设置为租户Id(上面屏幕截图中的3(
- 将客户端Id设置为客户端Id(在上面的屏幕截图中为1(
- 执行应用程序(Ctrl-F5(
- 使用屏幕右上角的登录,一切正常
- 进入左边的Fetch data,我在屏幕底部看到一个"Unhandled error has occured.Reload">
- 在Azure上,在之前创建的应用程序的"公开API"部分,我单击"添加范围">
- 我接受由客户端ID创建的默认应用程序ID URI,单击"保存并继续">
- 将作用域名称设置为"access_as_user">
- 将用户常量显示名称设置为"以用户身份访问">
- 将用户同意说明设置为"访问为用户说明">
- 将状态保持为"已启用">
- 然后单击"添加范围">
- 用于创建作用域的字段的截屏
- 在BlazorApp1.Client/Program.cs中:
- 更改了";api://api.id.uri/access_as_user"对于api://ClientID/access_as_user(上述截屏中的4个(
- 登录后,进入左侧的获取数据部分,我仍然会收到未处理的错误。重新加载"。在Edge的DevTools的网络部分,我可以看到:
- WeatherForecast返回401
- 在响应报头中的www认证是:Bearer error=";invalid_token";,error_description=";签名无效">
- DevTools屏幕截图
我觉得我错过了一些你们可能会发现显而易见的东西,但这是我第一次使用AzureAd进行Blazor,我必须承认,我不确定该在哪里继续搜索。。。
谢谢!
经过多次搜索,我找到了解决方案(https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-aspnet-core-webapp,步骤3(。事实证明,当你使用";仅限个人Microsoft帐户";对于应用程序的类型,不应该在BlazorApp1.Server/appsettings.json
中指定Tenant Id,而应该简单地指定"租户Id";自定义";。