如何正确配置 ASP.NET Core 5 Swagger 以与 Azure A/D 授权代码身份验证配合使用?

2023-12-25

我正在将 ASP.NET Core 5 Web API 安全性从隐式升级为授权代码。身份验证是使用 Azure A/D 完成的,我还需要允许使用 Swagger 文档。

我已经设法使它工作,但 client_secret 在我的情况下毫无用处,我想知道我是否做错了什么。我的配置如下:

天蓝色模数转换器

  • 重定向 URI:https://localhost:44444/swagger/oauth2-redirect.html
  • API 权限:Microsoft Graph + 自定义角色(access_as_user)
  • 令牌:访问令牌和 ID 令牌未选中

应用程序设置.json

"AzureAd": {
    "Instance": "https://login.microsoftonline.com",
    "ClientId": "xxxxxxxx-xxxxxxxxx",
    "TenantId": "xxxxxxxx-xxxxxxxxx"
},

启动.cs

services.AddMicrosoftIdentityWebApiAuthentication(Configuration);

private static void AddSwagger(IServiceCollection services, AzureAdAuthOptions auth)
{
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Foo API", Version = "v1", });
        AddSwaggerDocs_IncludeXmlComments(c);

        c.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme()
        {
            Type = SecuritySchemeType.OAuth2,
            Flows = new OpenApiOAuthFlows()
            {
                AuthorizationCode = new OpenApiOAuthFlow()
                {
                    AuthorizationUrl = new Uri($"{auth.Instance}/{auth.TenantId}/oauth2/v2.0/authorize"),
                    TokenUrl = new Uri($"{auth.Instance}/{auth.TenantId}/oauth2/v2.0/token"),
                    Scopes = { { $"api://{auth.ClientId}/access_as_user", "Access as user" } }
                }
            }
        });

        c.AddSecurityRequirement(new OpenApiSecurityRequirement
        {
            {
                new OpenApiSecurityScheme
                {
                    Reference = new OpenApiReference
                    {
                        Type = ReferenceType.SecurityScheme,
                        Id = "oauth2"
                    }
                },
                new string[] { }
            }
        });
    });
}

Swagger

  • oauth2(OAuth2,授权代码)
  • 应用程序:Foo - Swagger
  • 授权网址:https://login.microsoftonline.com/ https://login.microsoftonline.com//oauth2/v2.0/授权
  • 令牌网址:https://login.microsoftonline.com/ https://login.microsoftonline.com//oauth2/v2.0/令牌
  • client_id: 已填写
  • 客户端秘密

范围:只有一个,api://<guid>/access_as_user

如果我在没有秘密的情况下授权,它就会正常工作。但是,如果我提供秘密,我会收到以下错误:

Auth ErrorError:未经授权,错误:invalid_client,描述: AADSTS700025:客户端是公开的,因此“client_assertion”和 应提供“client_secret”。跟踪 ID: dbb64172-2bbb-4392-8fc5-0ee71ab9c301 相关 ID: 8c7edd8b-b6d0-435b-abeb-158b3278c3fe 时间戳: 2021-05-27 07:21:14Z

我认为需要这个秘密才能使身份验证过程更加安全,但我似乎无法使用它。我究竟做错了什么?


双重检查并allowPublicClient是假的。我已从 SPA 切换到 Web 客户端,并提供了密码,但收到以下错误:

Auth ErrorError:错误请求,错误:invalid_request,描述: AADSTS9002326:仅允许跨域令牌兑换 “单页应用程序”客户端类型。跟踪 ID: 6e11093f-319b-4d75-92b9-c6a39775a501 相关 ID: afcd9152-ccd5-4588-ae75-0b829272d66d 时间戳: 2021-05-28 06:10:58Z

所以,在使用 Swagger UI 时,我似乎陷入了 SPA 客户端的困境。


此错误表明您的应用程序是公共客户端应用程序,而不是机密客户端应用程序。请参见公共客户端和机密客户端应用程序之间的差异 https://learn.microsoft.com/en-us/azure/active-directory/develop/msal-client-applications.

要解决这个问题,只需要修改应用程序清单,更改allowPublicClient to false.

另外,请确保您选择Web创建应用程序时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何正确配置 ASP.NET Core 5 Swagger 以与 Azure A/D 授权代码身份验证配合使用? 的相关文章

  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 需要将现有模型(非内联)添加到 .Net core API 中的 Swagger 架构中

    我正在为基于 Net core 6 的 API 生成 Swagger 文档 我有一些错误模型将由我的网关返回 这些不会在我的任何 API 端点中使用 返回 我想将这些模型添加到 Swagger 文档架构集合中 如果我遵循内联方式 我就能够成
  • 如何让 Swagger UI 的参数成为下拉菜单而不是文本输入

    我正在使用 swagger 来显示我的 RESTApi API 的一个参数将字符串作为输入并将其转换为枚举值 有没有办法在 Swagger UI 上显示下拉菜单而不是文本输入字段 以便用户只能选择枚举值中的字符串值 您可以使用以下 swag
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • 使用服务主体连接 Azure SQL Server

    我想通过 Python 使用 Azure 服务主体连接 Azure SQL 数据库 请帮我 我可以使用服务主体通过 ADF 连接它 有一个图书馆Microsoft Azure Active Directory Authentication
  • ASP.NET MVC:从变量设置授权属性角色时出现问题,需要 const

    我在从变量设置授权属性角色值时遇到问题 错误消息表明它需要一个 const 变量 当我创建 const 类型变量时 它工作正常 但我试图从 Web Config 文件或其他允许最终用户设置它的文件中加载值 我正在使用集成 Windows 身
  • AuthenticationException:由于证书链中的错误,远程证书无效:UntrustedRoot

    我正在执行一项任务 使用本地 WebAPI 服务从本地 ToDo WebApp 对 Azure 中的 Active directory B2C 实例进行身份验证 除了在 Azure 试用版订阅中添加一个 B2C 实例之外 我还创建了 2 个
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • ASP.NET Web API Swagger(Swashbuckle)重复OperationId

    I have a web api controller like below In swagger output I am having the below image And when I want to consume it in my
  • 如何从 swagger 文档生成静态 html 文件?

    我创建了一个 Swagger 文档yaml文件位于 api swagger swagger yaml 现在我想分享一个静态 HTML 文档及其定义 但它已在招摇项目 https github com swagger api swagger
  • 子文件夹中忽略 ASP.NET web.config 授权设置

    我正在使用 asp net mvc 2 和 vs 2008 我正在尝试制作具有表单授权的网站 当我尝试限制对某些页面的访问时 我正在使用 asp net 管理工具 例如 我创建规则来拒绝匿名用户访问整个网站 正如预期的那样 管理工具在根 w
  • 无法在使用 Azure B2C 访问受保护的 .NET Core API 的 React 应用程序中获取访问令牌

    我在从 React 应用程序获取访问令牌并尝试访问我自己的 NET Core 3 1 Web API 时遇到问题 我能够正常登录并可以访问用户数据 但是当我尝试获取访问令牌时 我不断收到以下错误 将不胜感激任何帮助或推动正确的方向 谢谢你
  • 为 ASP.NET MVC 实现自定义登录

    我是 ASP NET MVC 的新手 需要一些关于如何实现以下内容的建议 该站点是一个使用率很高的站点 内部 内联网 约有 200 个用户 我们使用表单身份验证来访问 SQL Server DB 不是 Windows 集成 有些操作受到保护
  • 无需域名即可登录 Azure Active Directory

    我们希望使用 Azure Active Directory 作为面向外部的应用程序的用户存储 目前 我们的 MVC C 4 5 应用程序 使用 WIF 正在通过被动联合对本地 ADFS 2 0 代理 服务器进行身份验证 我们希望将其 移植
  • Swagger UI 禁用“试用”按钮

    我想禁用Try it OutAPI 文档中的按钮 我努力了 tryItOut false在参数和配置中 此外 我使用的是 swagger 2 0 默认情况下启用 尝试一下 按钮 而在 3 0 中默认情况下禁用它 因此 应该有配置它的选项 如
  • Windows Azure Active Directory 备份/恢复 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种备份 恢复 Windows Azure Active Directory 以防止用户错误的方法 我认识到 Azure 的强大
  • Office 365 API 或 Azure AD Graph API - 获取其他人的日历

    我正在尝试获取 Office 365 日历 不是为 我 而是为某个联系人 即 在我工作的公司 有全球地址列表 中 我想访问 Dave 的日历 就像在 Outlook 中一样 我已经浏览过文档here https msdn microsoft
  • Azure 应用程序错误地请求管理员同意?

    我希望有人对我在Microsoft的Azure Portal中使用新注册的应用程序遇到的问题有所了解 portal azure com https portal azure com 当我收到以下对话框时 我的登录问题 右下角出现错误代码和消
  • Swagger 生成 javascript-closure-angular-client

    我是 swagger 的新手 我从 swagger 的在线编辑器生成了一个 javascript 闭包角度客户端 它给了我一个 DefaultAPI js 和其他与我的对象定义匹配的 JS 文件 我在 swagger 文档和网上搜索了一种在
  • 如何更改Swagger中操作成功的响应状态代码?

    如图所示 它显示添加操作的 响应类 状态 200 但是 add 操作的实现方式永远不会返回 200 成功时返回 201 我的问题是如何将 状态 200 更改为 状态 201 这部分的代码如下 RequestMapping method Re

随机推荐