我几乎已经配置了
OpenId
owin
authentication
/
authorization
在里面
Azure Active Directory
.我的配置如下:
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
CookieName = "AppServiceAuthSession"
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = ClientId,
Authority = _authority,
PostLogoutRedirectUri = PostLogoutRedirectUri,
RedirectUri = PostLogoutRedirectUri,
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect("/Error?message=" + context.Exception.Message);
return Task.FromResult(0);
},
AuthorizationCodeReceived = async context =>
{
var id = new ClaimsIdentity(context.AuthenticationTicket.Identity.AuthenticationType);
id.AddClaims(context.AuthenticationTicket.Identity.Claims);
var appToken = "MyToken";
id.AddClaim(new Claim("MyTokenKey", appToken));
context.AuthenticationTicket = new AuthenticationTicket
(
new ClaimsIdentity(id.Claims, context.AuthenticationTicket.Identity.AuthenticationType),
context.AuthenticationTicket.Properties
);
}
},
});
但我想再添加一个应用程序
代币
(不是用户令牌)到声明列表,以便能够在我的站点上的任何位置使用此令牌。另外,对于我来说,每次身份验证会话都不需要从外部令牌提供商处获取该令牌多次,这一点也很好。
但我要补充我的逻辑的地方(
AuthorizationCodeReceived
以及来自
OpenIdConnectAuthenticationNotifications
)仅当我使用本地IIS(在本地运行)时调用,当我尝试使用azure IIS时,根本没有调用此方法。在本例中,我的用户已通过身份验证,但此方法和
OpenIdConnectAuthenticationNotifications
(除
RedirectToIdentityProvider
)未被激发。
我已经下载了的git源代码
Katana
并将此项目引用到我的而不是正式的nuget包来调试其,正如我目前所想,我已经找到了发生这种情况的原因。这个
已收到授权代码
从调用“event”方法
OpenIdConnectAuthenticationHandler
中的类
AuthenticateCoreAsync
方法但是,调用此方法时,要求下面的检查必须给出
符合事实的
结果:
if (string.Equals(Request.Method, "POST", StringComparison.OrdinalIgnoreCase)
&& !string.IsNullOrWhiteSpace(Request.ContentType) // May have media/type; charset=utf-8, allow partial match.
&& Request.ContentType.StartsWith("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase)
&& Request.Body.CanRead)
{
//some necessary preparation to call `AuthorizationCodeReceived` event method
}
正如我们所看到的,这种检查只允许
POST
请求,我看到这些
邮递
在中运行应用程序时的请求
本地IIS
,但我看不到这些
邮递
在中部署应用程序时请求
azure门户
(我已经调试了两个选项:on
本地IIS
并且在
azure门户
)。
如上所述,这是这些运行之间唯一的区别。(Azure IIS不发送
邮递
出于某种原因请求)。中的任何其他方法
卡塔纳
项目(我选中了该项目)以相同的方式调用。
有人能帮忙吗?
注意,我只在清除浏览器数据(缓存/历史记录等)后才检查任何更改。