在 Swashbuckle 中启用 Oauth2 客户端凭据流

2024-01-27

我使用 IdentityServer3 通过客户端凭据授予来保护 Web API。对于文档,我使用 Swashbuckle,但无法弄清楚如何在 SwaggerConfig 中为客户端凭据(应用程序)流程启用 Oauth2。任何帮助,将不胜感激!


我能够让这个工作。大部分都可以找到答案here http://knowyourtoolset.com/2015/08/secure-web-apis-with-swagger-swashbuckle-and-oauth2-part-2/.

为了让 client_credential 授权发挥作用,我必须更改一些部分。 第一部分位于 EnableSwagger 和 EnableSwaggerUi 调用中:

config.EnableSwagger(c => 
  {
    c.SingleApiVersion("v1", "sample api");
    c.OAuth2("oauth2")
     .Description("client credentials grant flow")
     .Flow("application")
     .Scopes(scopes => scopes.Add("sampleapi", "try out the sample api"))
     .TokenUrl("http://authuri/token");
    c.OperationFilter<AssignOAuth2SecurityRequirements>();
  }).EnableSwaggerUi(c =>
  {
    c.EnableOAuth2Support("sampleapi", "samplerealm", "Swagger UI");
  });

这里重要的变化是.Flow("application")我也用过.TokenUrl调用而不是.AuthorizationUrl这仅取决于您设置的特定授权方案。

我也使用了稍微不同的AssignOAuth2SecurityRequirements class

public class AssignOAuth2SecurityRequirements : IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
      var authorized = apiDescription.ActionDescriptor.GetCustomAttributes<AuthorizeAttribute>();
      if (!authorized.Any()) return;

      if (operation.security == null)
          operation.security = new List<IDictionary<string, IEnumerable<string>>>();

      var oAuthRequirements = new Dictionary<string, IEnumerable<string>>
      {
          {"oauth2", Enumerable.Empty<string>()}
      };

      operation.security.Add(oAuthRequirements);
    }
}

这应该足以显示身份验证开关。对我来说另一个问题是设置了默认身份验证对话框,因此用户只需选择范围,然后单击授权。就我而言,由于我设置身份验证的方式,这不起作用。我必须在 swagger-oauth.js 脚本中重新编写对话框并将其注入到 SwaggerUI 中。

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

在 Swashbuckle 中启用 Oauth2 客户端凭据流 的相关文章

随机推荐

  • Java - 访问控制允许来源多源域?

    所以我已经阅读了有关此问题的其他线程 但没有找到解决方案 我遇到的问题是因为我设置 access control allow methods true 我无法使用setHeader Access Control Allow Origin 我
  • C++11 成员初始化列表歧义

    由于此环境中的 GNU 标准库实现 我正在努力解决 c 11 符号解析中似乎存在歧义的问题 Arch Linux 4 2 5 1 x86 64 克 5 2 0 铿锵 3 7 0 Example include
  • 无法在 Angular JS 中使用 SmartTable 选择网格项

    我已经使用网格实现了智能表在 Angular JS 中 根据智能表文档 为了选择网格项 我们需要添加st select row row 我也加了这个 但我无法选择网格 实现的应用程序可以在 plunk 中看到 网址如下 任何人都可以帮我使用
  • 从 jQuery 调用 PHP 函数?

    我的网站上有一个 PHP 函数 需要几秒钟才能完成 这会保留整个页面 这是我不想要的 页面加载后是否可以使用 jquery 调用此 PHP 函数并将结果显示在 div 中 还要显示 ajax 加载器图像直到 PHP 函数完成 我一直在查看
  • hubris 无法安装:缺少 C 库:ruby、ruby、ruby

    我拼命尝试安装 Hubris 但每当我运行 cabal install 时安装就会失败 哈比斯链接 https github com mwotton Hubris tree master Haskell https github com m
  • Air for Android:设备警报后黑屏

    我确实有一个问题 而且没什么可继续的 我即将在三星应用商店上发布一个应用程序 使用 Air for Android As3 创建 并且刚刚得到了一份问题列表 在该应用程序经过三星工作人员测试后 才能发布该应用程序 我确实解决了几乎所有问题
  • Map和Reduce之间的主要区别

    我使用了这两种方法 但我对这两种方法的用法感到很困惑 有什么吗map可以做但是reduce不可以 反之亦然 注意 我知道如何使用这两种方法 我想知道这些方法之间的主要区别以及我们何时需要使用 Source http www globalne
  • OpenJDK 11:在 Linux 上获取 ClassNotFound,在 Windows 上运行良好

    我们有一个基于桌面的 swing 应用程序 可以在 Oracle JDK 1 8 上正常运行 迁移到 OpenJDK 11 后 我们遇到了一些未找到的类异常com sun java swing Painter 我们通过生成一个包含一些类的捆
  • 有没有办法在redis中获取客户端IP?

    我进行了网络搜索 但没有找到任何相关内容 我正在集群上运行redis 并且想找出哪台机器正在连接到redis 特别是当没有机器应该连接 但redis仍然说某些机器已连接时 提前致谢 使用 MONITOR 只会显示实际向 Redis 发送流量
  • mysql 小数点四舍五入

    我是 mysql 的新手 需要一些基本的东西 我需要像这样四舍五入小数 21 4758 应该是 21 48 0 2250 应为 0 22 23 0850 应为 23 08 22 9950 应该是 22 99 我尝试了很多事情但没能成功 Th
  • 在Python中处理从源目录到目标目录的一组文件

    Being 全新的在 python 中 我试图对 python 中的一组文件运行命令 该命令需要源文件和目标文件 我实际上使用的是 imagemagickconvert如下例所示 我可以提供源目录和目标目录 但是我不知道如何轻松保留从源目录
  • 为什么允许使用子类的构造函数实例化父类对象?

    考虑以下 public class parent int x parent x 5 public class child extends parent int y child super y 10 public static void ma
  • Android Rss 图片问题

    大家好 我对 Android 开发比较陌生 正在为新闻网站创建 RSS 阅读器 我遇到的问题是我想要获取图像的 rss feed 的网站的类型为 我为 android 上的代码所做的是 2 个类 RssItem 和 RssItem Disp
  • 浏览器选项卡之间的通信

    我有一个 HTML 页面 文件主要 html 使用 JavaScript 在同一域中打开一个新选项卡window open 新标签页 html method 在新选项卡中 用户可以通过单击按钮来结束其活动 此时 我想向开启者窗口发送一条消息
  • php/mysql账户激活

    我的新网站中的所有内容都工作正常 除了我无法让这段代码工作 query mysql query SELECT FROM members WHERE useremail useremail row mysql fetch assoc quer
  • 将二进制编码为音频 python 或 C

    使用C或Python 首选Python 我如何将二进制文件编码为音频 然后通过耳机插孔输出 以及如何使用麦克风插孔的输入将音频解码回二进制 到目前为止我已经学会了如何使用 python 将文本文件转换为二进制文件 这与 RTTY 通信类似
  • 在 WinCrypt 中使用 CertCreateCertificateContext 时遇到 ASN1 错误标记值

    我在这里做错了什么 创建证书上下文时 我不断收到错误 0x8009310b 满足 ASN1 错误标记值 我知道我正在测试的证书很好 我使用 DER Base 64 和 P7B 格式从中间存储中导出它 三种情况都失败 int tmain in
  • 在 UIImageView 中对 UIImage 进行向上和向下动画(就像悬停一样)循环

    您好 我有一个图像 我想上下移动 向上 10 像素和向下 10 像素 以便我的图像看起来悬停 我怎样才能用简单的动画来做到这一点非常感谢 您可以使用核心动画来对视图层的位置进行动画处理 如果您将动画配置为additive您不必费心计算新的绝
  • 如何将开发人员工具窗口恢复到正常配置?

    我有 Edge 95 0 1020 53 在 Win 10 Pro 21H1 中 我不是技术人员 没有什么具体原因 我打开了开发者工具 大约有 10 年没有打开过 打开后 我看到了我见过很多次的配置 使用整个窗口四分之三的父网页位于左侧 这
  • 在 Swashbuckle 中启用 Oauth2 客户端凭据流

    我使用 IdentityServer3 通过客户端凭据授予来保护 Web API 对于文档 我使用 Swashbuckle 但无法弄清楚如何在 SwaggerConfig 中为客户端凭据 应用程序 流程启用 Oauth2 任何帮助 将不胜感