无法在Swagger中进行身份验证

时间:2019-09-13 11:53:38

标签: azure authentication azure-active-directory swagger

嗨,我已经在.net核心中开发了Web应用程序。我在azure广告中注册了两个应用程序。一种用于我的Web API,另一种用于我的招摇。根据{{​​3}},我们需要大方添加api访问权限才能与网络api通信。但是,每当我尝试在azure门户中添加权限时,我都看不到我的Web api应用程序。我不确定我没有看到我的Web应用程序授予api访问权限。 Next每当我单击大笔授权时,我都会收到错误消息。客户端已请求访问未在客户端应用程序注册的所请求权限中列出的资源。下面是错误的屏幕截图。

下面是代码。

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");
            });

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

http://www.sharepointconfig.com/2018/08/configure-swagger-to-authenticate-against-azure-ad/

1 个答案:

答案 0 :(得分:0)

与我的一个应用程序不同的一件事是,我们用字典定义了其他查询参数:

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端点,因此您无需指定作用域。