【问题标题】:Unable to Authenticate in Swagger无法在 Swagger 中进行身份验证
【发布时间】:2019-09-14 02:51:53
【问题描述】:

您好,我在 .net 核心中开发了 Web 应用程序。我在 azure ad 中注册了两个应用程序。一个用于我的 web api,一个用于我的招摇。根据http://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/,我们需要在swagger中添加api访问来与web api进行通信。但是,每当我尝试在 azure 门户中添加权限时,我都看不到我的 web api 应用程序。我不确定我看不到我的网络应用程序来授予 api 访问权限。接下来每当我在招摇中单击授权时,我都会收到错误消息客户端已请求访问未在客户端应用程序注册中请求的权限中列出的资源。以下是错误屏幕截图。

下面是代码。

services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
                c.AddSecurityDefinition("oauth2", new OAuth2Scheme
                {
                    Type = "oauth2",
                    Flow = "implicit",
                    AuthorizationUrl = "https://login.microsoftonline.com/8b95-448d-b259-98a44d112f7c/oauth2/authorize",
                    Scopes = new Dictionary<string, string>
                    {
                       { "openid", "Sign In Permissions" },
                       { "profile", "User Profile Permissions" } },
                    TokenUrl = "https://login.microsoftonline.com/98a44d112f7c/oauth2/token"
                });
            });

在配置中,

 app.UseSwaggerUI(c =>
            {
                c.OAuthClientId(Configuration["Swagger:ClientId"]);
                c.OAuthClientSecret(Configuration["Swagger:ClientSecret"]);
                c.OAuthRealm(Configuration["AzureAD:ClientId"]);
                c.OAuthAppName("My API V1");
                c.OAuthScopeSeparator(" ");
                c.OAuthAdditionalQueryStringParams(new { resource = Configuration["AzureAD:ClientId"] });
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

请问我该如何解决上述问题?有人可以帮我找到这个问题吗?任何帮助,将不胜感激。谢谢

【问题讨论】:

  • 看起来您正在使用 v1 端点而不是指定资源。您可以 a) 指定资源参数(API 的客户端 id/app id URI)或 b) 使用 v2 端点和指定 API 范围的范围。不要使用 openid 和 profile,它们是 id 令牌,你需要一个访问令牌。
  • 您好 Junnas,感谢您的回答。我已经添加了我的招摇代码。你能帮我添加确切的代码吗?

标签: azure authentication azure-active-directory swagger


【解决方案1】:

在我的一个应用中不同的是,我们使用字典定义了额外的查询参数:

options.OAuthAdditionalQueryStringParams(new Dictionary<string, string>
{
    ["resource"] = _configuration["SwaggerUi:ApiResourceUri"]
});

但这可能不是问题的原因。 您需要在 Azure AD 中找到 Swagger 应用注册,由您在 Configuration["Swagger:ClientId"] 中的客户端 ID 标识。 在那里您需要转到 API 权限,并添加您的 API 定义的所有委派权限。

如果您尚未定义任何范围,请找到您的 API 的应用注册并打开公开 API 选项卡。 添加范围指南:https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-protected-web-api-app-registration#exposing-delegated-permissions-scopes

此外,从技术上讲,您不需要指定范围,因为您使用的是 v1 端点。

【讨论】:

  • 谢谢我能够添加应用程序。之后我添加了范围,我能够添加客户端应用程序。现在我可以授权我收到 401 错误。我在上面添加了屏幕截图。
  • 您是否需要 swagger 应用程序上的范围并授予它?
  • 我也在网络选项卡中进行了检查。 www-authenticate: Bearer 没有令牌就来了。我可以知道会是什么问题吗?
  • 不,我不需要范围。但是没有范围我无法添加客户端应用程序
  • 我的授权网址是 AuthorizationUrl = "login.microsoftonline.com/someid/oauth2/authorize",这样对吗?
猜你喜欢
  • 1970-01-01
  • 2016-01-11
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多