使用此示例: https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect
在本地运行时,这可以正常工作 但是当我们部署它(azure web app)时,它仍然会进行身份验证,但是OpenIdConnectAuthenticationNotifications.AuthorizationCodeReceived事件没有被触发。
这是代码。
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = Authority,
PostLogoutRedirectUri = redirectUri,
RedirectUri = redirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications()
{
AuthorizationCodeReceived = OnAuthorizationCodeReceived,
AuthenticationFailed = OnAuthenticationFailed
}
});
private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification context)
{
var code = context.Code;
ClientCredential credential = new ClientCredential(clientId, appKey);
string userObjectID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext(Authority, new NaiveSessionCache(userObjectID));
Uri uri = new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path));
AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(code, uri, credential, graphResourceId);
}
这是一个问题,因为它需要缓存令牌以进行出站呼叫。 它没有它,它会抛出。
有一个问题导致这与redir网址后面的尾部斜线相关,但我们已经尝试过了。
所以两个问题......
1)在什么条件下会发生事件,为什么在本地运行时这会起作用?根据文档,它应该是#34;如果协议消息中存在授权代码,则在安全令牌验证后调用。"
2)调试这个的最佳方法是什么?不知道在这里寻找什么。
答案 0 :(得分:0)
1)在什么条件下事件会被解雇?为什么在本地运行时这会起作用?根据文档,它应该是“如果协议消息中存在授权代码,则在安全令牌验证后调用。”
作为文档点,当Web应用验证协议消息中存在授权代码时,将触发此事件。
2)调试此方法的最佳方法是什么?不知道在这里寻找什么。
使用access_token调用请求时,有许多原因可能导致异常。例如,根据您使用NaiveSessionCache
的代码,该代码使用Sesstion
对象持久化令牌。这意味着当您使用多个实例部署Web应用程序时,您也可能会收到异常。为了解决这个问题,我建议您远程调试项目以找到根本原因。对于远程调试,您可以参考以下文档: