C# [Authorize]成功后OpenIDConnect SSO出现问题
我还在学习MVC认证,所以我道歉。 我正在尝试使用OpenIDConnect和Azure AD来设置SSO,并且基于Microsoft在Azure网站的快速入门中提供的示例。特别是打电话C# [Authorize]成功后OpenIDConnect SSO出现问题,c#,asp.net-mvc,azure-active-directory,openid-connect,kentico-mvc,C#,Asp.net Mvc,Azure Active Directory,Openid Connect,Kentico Mvc,我还在学习MVC认证,所以我道歉。 我正在尝试使用OpenIDConnect和Azure AD来设置SSO,并且基于Microsoft在Azure网站的快速入门中提供的示例。特别是打电话 app.UseOpenIdConnectAuthentication( new OpenIdConnectAuthenticationOptions { //options } 然后使用[Authorize]属性将用户重定向到Microsoft登录。这是可行的,我正
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
//options
}
然后使用[Authorize]属性将用户重定向到Microsoft登录。这是可行的,我正在收回用户的索赔
但是,当我将RedirectUrl添加到OpenIdConnectAuthenticationOptions中时,它似乎被忽略,请求在验证后返回到启动操作,而不是执行回调
当我通过SignIn发出直接质询时,重定向工作正常,但这需要我以某种方式将对页面的任何“未经授权”访问重定向到该SignIn方法。如果[授权]能做同样的工作,我认为这更干净。
在线阅读表明[Authorize]故意在事后返回基本操作,因此我认为我没有做错什么
在任何情况下,如果[Authorize]这样做都没关系,除了在授权成功时,我想在执行带有[Authorize]标记的实际操作之前运行一些自定义代码(设置一些自定义cookie值/会话变量,检查数据库以匹配用户与我们的系统,诸如此类)。
我不想在他们“登录”的时候做每一个请求。
理想情况下,我将能够访问新验证的声明,或者更好地访问事件中的ExternalLoginInfo对象
是否有我可以为此目的附加一些代码的事件或东西
我发现“SecurityTokenValidated”,但该方法中的用户和登录信息都为null
我还试着在[Authorize]完成后等待,直到我回到基地行动。我有用户,但没有外部登录信息,我不想将“post auth”代码复制/粘贴到用户可以到达站点的每个操作上
这是我的startup.Auth.cs:
app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
app.UseCookieAuthentication(new CookieAuthenticationOptions());
// I tried creating a second temporary cookie with WebCookieManager, that didn't help.
//app.UseCookieAuthentication(new CookieAuthenticationOptions
//{
// AuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
// CookieName = OWIN_COOKIE_PREFIX + DefaultAuthenticationTypes.ApplicationCookie,
// ExpireTimeSpan = TimeSpan.FromMinutes(5),
// CookieManager = new SystemWebCookieManager()
//});
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
RedirectUri = postLoginRedirectUri, //This seems to get ignored anyways in favor of returning to the [Authorize]-marked Action.
Scope = OpenIdConnectScopes.OpenIdProfile,
ResponseType = OpenIdConnectResponseTypes.IdToken,
TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = true },
Notifications = new OpenIdConnectAuthenticationNotifications
{
SecurityTokenValidated = OnAuthenticationSuccess
}
});
您应该检查db things并在SecurityTokenValidated方法中设置HttpContext.Current.Session等。也许你可以检查一下这个问题,并从中获得如何做你想做的事情的灵感?此外,也许应该首先检查context.AuthenticationTicket.Identity.IsAuthenticated,以确保身份验证成功?