C# 在ASP.NET Core上使用具有标识的MSAL注册外部用户
问题: 在我的ASP.NET Core 3.1 MVC Web应用程序中,我使用C# 在ASP.NET Core上使用具有标识的MSAL注册外部用户,c#,asp.net-core,asp.net-identity,microsoft-graph-api,msal,C#,Asp.net Core,Asp.net Identity,Microsoft Graph Api,Msal,问题: 在我的ASP.NET Core 3.1 MVC Web应用程序中,我使用services.AddSignIn(配置)在my startup.cs(由提供)中,我想在登录时注册一个用户,回调方法ExternalLoginInfo info=wait\u signInManager.getexternallogininfosync()始终返回null 背景: 我有一个应用程序,它使用 注册和存储用户所有用户都使用他们的Microsoft 帐目 我想增强应用程序以使用MS Graph API
services.AddSignIn(配置)
在my startup.cs(由提供)中,我想在登录时注册一个用户,回调方法ExternalLoginInfo info=wait\u signInManager.getexternallogininfosync()代码>始终返回null
背景:
- 我有一个应用程序,它使用
注册和存储用户所有用户都使用他们的Microsoft
帐目
- 我想增强应用程序以使用MS Graph API(达到Sharepoint应用程序)
一些文件的网站),所以我修改了应用程序以使用
用于针对Graph API进行身份验证
- 我用过
要尝试这些功能并顺利登录,我可以连接
图形API也是如此
详情:
My appsettings.json:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "something.onmicrosoft.com",
"TenantId": "GUID",
"ClientId": "GUID",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath ": "/signout-callback-oidc",
"ClientSecret": "GUID"
}
启动cs:
services.AddDbContext<UserDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection"), u => u.MigrationsAssembly("DatabaseLayer.Core")));
services.AddIdentity<AppUser, IdentityRole>(options =>
{
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores<UserDbContext>()
.AddDefaultTokenProviders();
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
// Handling SameSite cookie according to https://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1
options.HandleSameSiteCookieCompatibility();
});
services.AddOptions();
services.AddSignIn(Configuration);
services.AddDbContext(选项=>
options.UseSqlServer(
Configuration.GetConnectionString(“DefaultConnection”),u=>u.MigrationsAssembly(“DatabaseLayer.Core”);
服务.附加性(选项=>
{
options.User.RequireUniqueEmail=true;
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
配置(选项=>
{
//此lambda确定给定请求是否需要非必要cookie的用户同意。
options.checkApprovered=context=>true;
options.MinimumSameSitePolicy=SameSiteMode.Unspecified;
//根据标准处理SameSite cookiehttps://docs.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1
options.HandleSameSiteCookieCompatibility();
});
services.AddOptions();
服务。AddSignIn(配置);
问题:为了注册用户,我需要配置什么来获取任何返回的外部登录?根据,使用MSAL捕获外部用户是不可能的。此外,也不可能使用任何内部用户,因为它们会干扰登录的MSAL用户
所以微软的ASP.NET核心身份框架与他们的身份框架不兼容,尼斯。(遗憾的是,这使得MSAL对我来说毫无用处,我想不出任何商业案例,生产性应用程序不需要任何内部用户存储库才能正常工作。即使我只需要存储用户的设置,我也会为此使用identity framework)