我正在构建一个将由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 回答
如果您还需要获取身份以及代码,则应使用您的请求指定此=>
response_type=code+id_token
.检索两者后,我希望您能够为您的用户设置cookie,并请求客户端身份验证和令牌 .
我很确定在Authorize access to web applications using OpenID Connect and Azure Active Directory中描述了确切的情况 .