我使用.Net 4.8(.net Framework不是.net Core)创建了一个默认的MVC项目,并添加了Entra Id(Azure AD)。
public void ConfigureAuth(IAppBuilder app)
{
OwinTokenAcquirerFactory factory = TokenAcquirerFactory.GetDefaultInstance<OwinTokenAcquirerFactory>();
app.AddMicrosoftIdentityWebApi(factory);
factory.Build();
}
appsettings.json
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "id of application",
"Audience": "api://.....",
"TenantId": "id of tennant"
}
}
我可以用Postman向那个API发送授权请求。
我现在要和斯瓦格鉴定。为此,我添加了Swagger 5.6
包
<package id="Swashbuckle" version="5.6.0" targetFramework="net48" />
<package id="Swashbuckle.Core" version="5.6.0" targetFramework="net48" />
然后,我想显示“授权”按钮的 Swagger ,但它没有出现。
SwaggerConfig
c.OAuth2("oauth2")
.Description("OAuth2 Implicit Grant")
.Flow("implicit")
.AuthorizationUrl("http://myazureurl/api/oauth/dialog")
//.TokenUrl("https://tempuri.org/token")
.Scopes(scopes =>
{
scopes.Add("read", "Read access to protected resources");
scopes.Add("write", "Write access to protected resources");
});
c.EnableOAuth2Support(
clientId: "myclientid",
clientSecret: null,
realm: "myrealm",
appName: "Swagger UI"
);
如何为Entra Id添加身份验证并使其与Swagger一起工作?
编辑在检查生成的swagger文档后,我将Flow更新为正确的值并设置了一个令牌URL,它现在看起来与我从一个正在工作的.net核心项目中获得的swagger文档几乎相同,但仍然没有按钮显示
这是工作的.net核心配置
2条答案
按热度按时间ljo96ir51#
这是个棘手的问题。据我所知,如果认证不正确,授权按钮不会出现。我的猜测是,在生成的Swagger JSON中生成的
securityDefinitions
部分中有一些不正确的地方。我发现this other question有点类似。我假设.Token方法在你的代码中也被正确配置了(就像你在这里的配置中注解的那样)。我建议您检查生成的Swagger JSON,以确保
securityDefinitions
和security
部分的格式正确,并包含预期的值。tkclm6bt2#
我认为在安装所需的NuGet包(
Swashbuckle
和Microsoft.Owin.Security.Jwt
和Microsoft.Owin.Security.OpenIdConnect
)后,您应该在Startup.cs中配置Azure AD身份验证现在尝试使用
c.OAuth2
方法更新Startup.cs
的ConfigureAuth
方法中的Swagger配置!同时将Swagger中间件添加到
Startup.cs
中再次尝试运行应用程序并访问Swagger UI,如果操作正确,您应该会看到一个
Authorize
按钮。