首页 文章

ASP.NET Core MVC向Azure AD验证用户,然后创建JWT Bearer Token以调用Web API

提问于
浏览
9

我正在构建一个将由Azure AD保护的ASP.NET Core Web API(通过 app.UseJwtBearerAuthentication 保护)

我正在构建一个ASP.NET核心MVC控制器(由 app.UseOpenIdConnectAuthentication 保护),该控制器调用 WebAPI .

我正在尝试实现OpenID Connect Basic Client Implementer指南中描述的身份验证流程 .

我找到这个模式的示例代码 .

一个例子在这里:

/active-directory-dotnet-webapp-webapi-openidconnect/blob/master/TodoListWebApp/App_Start/Startup.Auth.cs)

正在使用 .NET (不是 .NET Core )和 OWIN .

您使用 OnAuthorizationCodeReceived 方法并调用 AcquireTokenByAuthorizationCodeAsynch 来获取您将在WebAPI请求中使用的令牌 .

当我尝试在ASP.NET Core MVC中构建类似模式时,我看到以下内容:

  • 当我配置MVC的应用程序时 . UseOpenIdConnectAuthentication 有默认值,然后我可以登录系统,但我没有收到授权码 . 触发我的事件是 OnTokenValidated 事件,而不是上面显示的 AuthorizationCodeReceived 事件 . 它有一个身份和一个令牌,这很棒 .

  • 当我配置MVC的应用程序时 . UseOpenIdConnectAuthentication response-type = “code” ,然后我得到一个代码, OnAuthorizationCodeReceived 事件触发,但我没有回复身份 .

[我的azure应用程序清单已设置为 oauth2AllowImplicitFlow: true . 在这种情况下,用户身份验证和令牌生成被压缩成一个步骤,这不像我需要的那样安全,所以我设置为false .

经过进一步调查,我了解到Asp.Net Core基础架构旨在处理多个独立的身份验证中间件条目

Microsoft.AspNetCore.Authentication.JwtBearer / JwtBearerHandler.cs

如果您尝试使用带有JwtBearer配置的 SignIn 工作流,则编码为抛出'not allowed'错误 .

因此,看起来我将不得不遵循多种中间件方法 . 一个用于登录的基于cookie的中间件,以及一个基于承载令牌的中间件,用于承载令牌以访问链接到该App的服务 . (而不是来自 OWIN 示例的模型,其中在接收到认证代码后完成对服务的调用)

此功能(多个身份验证中间件)在https://docs.asp.net/en/latest/security/authorization/limitingidentitybyscheme.html中描述

有没有人有这方面的例子?还是我还在想这个错?

1 回答

相关问题