我有一个非常简单的网络核心应用程序,只有可用的身份验证方法是Azure。我没有任何本地帐户,我不想要除Azure AD以外的任何其他身份验证机制。
但是我想知道什么时候和谁创建/修改了任何记录。所以我需要我所有的表和我的用户之间的关系。但是我不能这样做,因为在使用Azure身份验证时,我没有任何保存用户信息的表。
为此,我扩展了IdentityUser,以查看当用户通过Azure进行身份验证时,它是否正在(至少)填充AspNetUserLogins表中的任何数据,但它当然不会这样做。
解决这个问题的最好方法是什么?
我是否应该创建一个包含用户姓名、电子邮件地址、objectId信息的表,在每次用户登录时检查从Azure到name和email address的任何更改?然后使用另一个元表在表之间创建关系?
任何帮助都是非常感谢的!
发布于 2022-10-14 01:24:41
对于Azure身份验证,它将允许您使用microsoft (xx@yy.onmicrosoft.com)在应用程序中签名,因此不需要在应用程序中设置用户管理模块。因此,它将为您提供读取用户信息的功能。
在您的需求中,您需要查看何时/谁修改任何记录。根据我的理解,您应该有一个可能包含以下列的表:id(primary key), operation_type, operation_target, timestamp, user_id...
,这样您就可以知道谁在某些页面上做了一些操作。在插入行之前,必须获取用户信息。在用户登录应用程序后,您可以在Contorller中使用var user = HttpContext.User.Identity;
获取用户信息。
如果您需要显示包含用户详细信息的操作细节。当数据库中有一个用户表时,可以单独使用user表查询记录表,但是当您使用AAD时,就没有用户表了。因此,当您需要查询用户详细信息时,应该使用Ms图形api来查询用户信息。就像这
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
private readonly GraphServiceClient _graphServiceClient;
public HomeController(GraphServiceClient graphServiceClient)
{
_graphServiceClient = graphServiceClient;
}
currentUser = await _graphServiceClient.Me.Request().GetAsync();
https://stackoverflow.com/questions/74055593
复制