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

geo*_*rge 9 openid asp.net-mvc asp.net-web-api openid-connect

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

我正在构建一个调用WebAPIASP.NET Core MVC控制器(安全app.UseOpenIdConnectAuthentication).

我正在尝试实现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中构建类似模式时,我看到以下内容:

  1. 当我配置MVC的应用程序时.UseOpenIdConnectAuthentication使用默认值,然后我可以登录系统,但我没有收到授权码.为我开火的OnTokenValidated事件是事件,而不是AuthorizationCodeReceived上面显示的事件.它有一个身份和一个令牌,这很棒.
  2. 当我配置MVC的应用程序时.UseOpenIdConnectAuthentication response-type = “code”,然后我得到一个代码回来,OnAuthorizationCodeReceived事件发生了,但我没有回复身份.

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

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

Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs

如果您尝试使用SignIn具有JwtBearer配置的工作流,则编码为抛出"不允许"错误.

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

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

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

dro*_*der 0

如果您还需要获取身份和代码,您应该在您的请求 => 中指定这一点response_type=code+id_token

检索后,我希望您能够为您的用户设置 cookie,并请求客户端身份验证和令牌。

我非常确定使用 OpenID Connect 和 Azure Active Directory 授权访问 Web 应用程序中描述了确切的场景。