0
데이터베이스 사용자를 Azure AD 전자 메일 주소로 인식하고 로컬 데이터베이스 사용자의 속성을 기반으로 azure AD 인증 된 사용자에게 사용자 지정 클레임을 추가하려고합니다. startup.cs에서 나는 가지고 : Azure 사용자 .net 코어에 대한 로컬 데이터베이스 기반 사용자 정의 권한 부여 추가
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<IClaimsTransformer, ClaimsTransformer>();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, KayttajatContext context)
{
...
app.UseClaimsTransformation(async (c) =>
{
IClaimsTransformer transformer = c.Context.RequestServices.GetRequiredService<IClaimsTransformer>();
return await transformer.TransformAsync(c);
});
...
}
그런 다음 ClaimsTransformer.cs은 다음과 같습니다
:namespace Authtest
{
public class ClaimsTransformer : IClaimsTransformer
{
private readonly KayttajatContext _context;
public ClaimsTransformer(KayttajatContext dbContext)
{
_context = dbContext;
}
public async Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext ctrans)
{
string sposti = ((ClaimsIdentity)ctrans.Principal.Identity).Name;
var user = await _context.Henkilöt.FirstOrDefaultAsync(t => t.Sposti == sposti);
if (user.Sposti == sposti)
{
((ClaimsIdentity)ctrans.Principal.Identity).AddClaim(new Claim(ClaimTypes.Role, "Administrator"));
((ClaimsIdentity)ctrans.Principal.Identity).AddClaim(new Claim(ClaimTypes.Role, "User"));
}
else
{
((ClaimsIdentity)ctrans.Principal.Identity).AddClaim(new Claim(ClaimTypes.Role, "User"));
}
return ctrans.Principal;
}
}
}
를하지만 나에게 준다 "NullReferenceException이 :. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다" at if (user.Sposti == sposti)
대신 변수 중 하나에 문자열 값을 제공하면 if 문이 올바르게 작동합니다. 내가 뭘 잘못하고 있는지 모르겠다. 비동기와 관련이 있습니까? 이게 너를 괴롭히는 걸 도와 줘.
사용자 개체가 null 인 것처럼 보입니다. 비동기 최우수 사용자가 우리에게 시간을두고 돌아 오지 않을 것이기 때문일 수 있습니다. –
그래, 그게 내가 의심하는 바야. 어떻게 가치를 부여 할 수 있니? –
저는 비동기 프로그래밍에서 불량입니다. 그것은 장님 발사를 완료 할 것이다. 하지만 먼저 DB에 이메일이 있는지 확인해야합니다. 일단 확인되면 비동기에 대해 걱정할 필요가 있습니다. –