其中
await Events.AuthorizationCodeReceived(context);
必须与反向通道中的访问代码交换授权码,但是根据OpenIdConnectEvents
的源代码:
public class OpenIdConnectEvents : RemoteAuthenticationEvents
{
public Func<AuthorizationCodeReceivedContext, Task> OnAuthorizationCodeReceived { get; set; } =
context => Task.CompletedTask;
// ...
}
它什么也不做,只是返回
Task.CompletedTask
,所以这个 OnAuthorizationCodeReceived
事件必须在某个地方被覆盖,但我看不到它在哪里被覆盖?我们用户当然不能每次使用openid connect都直接写。
OnAuthorizationCodeReceived
只是事件标志。它不处理代码和访问令牌的交换。await Events.AuthorizationCodeReceived(context);
只是RunAuthorizationCodeReceivedEventAsync
方法中操作的一部分。 您可以检查此方法上面的描述,该方法应该处理令牌交换:
RedeemAuthorizationCodeAsync
。 https://source.dot.net/#Microsoft.AspNetCore.Authentication.OpenIdConnect/OpenIdConnectHandler.cs,987
您还可以检查
HandleRemoteAuthenticateAsync
下运行“代码流”整个过程的这部分代码:包括获取代码和兑换令牌的代码。 https://source.dot.net/#Microsoft.AspNetCore.Authentication.OpenIdConnect/OpenIdConnectHandler.cs,810