我在Visual Studio 2017中创建了一个默认的ASP. NET Core网站。我选择使用Azure Active Directory进行身份验证。我运行该网站,可以使用Active Directory中的帐户成功登录。
我可以检索由Active Directory提供的索赔信息,例如,通过调用以下行,我获得了名称。
User.Claims.FirstOrDefault(c => c.Type == "name")?.Value;
我想为登录用户添加一个自定义声明-CompanyId=123456。我可以添加自定义声明,但它仅在设置声明的页面上可用。
Claim claim = new Claim("CompanyId", "123456", ClaimValueTypes.String);
((ClaimsIdentity)User.Identity).AddClaim(claim);
我的理解是,我需要以某种方式更新由Active Directory发布的令牌,或者在令牌发布之前设置声明。我不知道怎么做。
我怀疑这需要在SignIn()的AccountController中完成
// GET: /Account/SignIn
[HttpGet]
public IActionResult SignIn()
{
return Challenge(
new AuthenticationProperties { RedirectUri = "/" }, OpenIdConnectDefaults.AuthenticationScheme);
}
我已经阅读了很多关于这个场景的文章和示例(包括https://github.com/ahelland/AADGuide-CodeSamples/tree/master/ClaimsWebApp)但是,我们还没有解决如何跨请求持久化声明的问题。
我已经成功地使用ASP. NET身份作为身份验证提供程序来持久化自定义声明,但这似乎是因为自定义声明被保存到数据库中。.
对于那些想了解更多细节的人,提供的代码将放在Startup中。反恐精英
在配置方法中添加/编辑:
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = Configuration["Authentication:AzureAd:ClientId"],
Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"],
CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],
Events = new OpenIdConnectEvents
{
OnTokenValidated = TokenValidated
}
});
私有任务令牌验证方法位于Startup.cs
下面的示例是一个很好的参考。https://github.com/Azure-Samples/active-directory-dotnet-webapp-openidconnect-aspnetcore-v2/blob/master/WebApp-OpenIDConnect-DotNet/Startup.cs
OnTokenValidated
为您提供了修改从传入令牌获得的ClaimsIdentity
的机会,以下代码供您参考:
private Task TokenValidated(TokenValidatedContext context)
{
Claim claim = new Claim("CompanyId", "123456", ClaimValueTypes.String);
(context.Ticket.Principal.Identity as ClaimsIdentity).AddClaim(claim);
return Task.FromResult(0);
}
设置OpenIdConnectEvents:
Events = new OpenIdConnectEvents
{
OnRemoteFailure = OnAuthenticationFailed,
OnAuthorizationCodeReceived = OnAuthorizationCodeReceived,
OnTokenValidated = TokenValidated
}
然后在控制器中使用:
var companyId= User.Claims.FirstOrDefault(c => c.Type == "CompanyId")?.Value;
在过去的几周里,我一直在努力掌握KeyClope,这样我就可以实现一种使用遗留提供商(基于Oracle,带有会话表和各种奇怪的东西)对用户进行身份验证的方法。我们计划在不久的将来解决这个问题,但目前我们必须解决这个问题,所以我们的想法是在前线使用KeyClope——利用它提供的主要好处,比如SSO——在需要身份验证的应用程序中省略传统的身份验证提供程序。 我读了一些关于构建自定义OIDC身份提供程
我需要保护我的spring boot应用程序,这是我所拥有的: null 我知道spring boot的web安全特性,但是没有足够的信息来说明如何与自定义令牌一起使用这些特性。
我使用的是spring security 3.1.3。在我正在开发的应用程序中,当用户尝试登录时,除了检查用户名和密码外,我还需要进行额外的检查以验证他们的帐户(特别是,他们的帐户没有一个标志集,表明他们被禁止登录)。我不知道最好的办法是什么。 我应该创建一个身份验证过滤器bean,并将其包含在SpringXML中的表单登录元素中吗?或者,我应该使用仅在用户成功满足用户名/密码要求时才运行的身份验
我试图使用keycloak只用于身份验证,并有自己的自定义过滤器用于授权。因此理想的流程是:首先,Keycloak filter对请求进行身份验证,并在上下文中设置身份验证对象。然后,我的自定义过滤器应该运行,它应该获得现有的身份验证对象,在该身份验证对象中添加权限,并将其设置回上下文中。 因此,首先,在speing引导应用程序中使用keycloak是正确的方法吗?如果是,那么如何使我的过滤器在过
我试图在一个反应式Spring Boot应用程序中配置一个Spring Security性,该应用程序具有一个Vuejs前端,在未经身份验证时将用户重定向到外部OpenID提供程序(用于身份验证)。在用户通过OpenID提供程序进行身份验证并重定向回应用程序(前端)后,将根据OpenID提供程序的响应创建用户名密码身份验证令牌(身份验证),并手动进行身份验证。 但是,在执行此操作时,应用程序似乎无
当使用Firebase Auth进行身份验证时,我想自动输入通过SMS接收的代码。我能够接收短信并手动完成身份验证过程,但当我使用SmsRetriever时,应用程序崩溃,然后显示底部工作表对话框。这是Logcat中显示的所有内容: [SmsRetrieverHelper]SMS校验码请求失败:未知状态代码:17010 null 用户输入其电话号码的代码片段: 这是片段中的代码,用户必须在其中输入