在框架 .net 环境中从 Microsoft Graph 中检索记录的用户信息

Retrieve logged user info from microsoft graph in a framework .net environment

我需要在 .net 框架 Web 应用程序环境中实施 SSO。需要验证和检索登录用户的 samaccountname。

我有一个工作代码,但只能在桌面和移动设备环境中工作,我猜是因为我使用的是“PublicClientApplicationBuilder”。

桌面示例工作代码:

string clientId = "c8a73432-9383-4e7c....."; 
string tenantId = "efe4a126-2f4f-42ef....."; 

var app = PublicClientApplicationBuilder.Create(clientId)
  .WithTenantId(tenantId)
  .WithRedirectUri(http://localhost)  
  .Build();

string[] scopes = new string[]
{
https://graph.microsoft.com/User.Read
};

var result = await app.AcquireTokenInteractive(scopes)
                     .ExecuteAsync();
var stream = result.IdToken.ToString(); // return IDtoken with samaccountname

有人有适用于网络应用程序的示例代码吗?

我试过使用“ConfidentialClientApplicationBuilder”,但不起作用:

string clientId = "c8a73432-9383..."; 
string tenantId = "efe4a126-2f4f..."; 
string secret = "1qN8Q~4m7qD5_...";
string authorityUri = $https://login.microsoftonline.com/efe4e126-2f4f-42ef...;

var app = ConfidentialClientApplicationBuilder.Create(clientId)
    .WithClientSecret(secret)
    .WithAuthority(new Uri(authorityUri))                    
    .WithRedirectUri(http://localhost) 
    .Build();

string[] scopes = new string[]
{
 https://graph.microsoft.com/User.Read
};

var accessTokenRequest = app.AcquireTokenForClient(scopes); 

var accessToken = accessTokenRequest.ExecuteAsync().Result.AccessToken;

提前致谢!

在机密客户端应用程序中,通常每个用户都有一个缓存。因此,您需要获取与用户关联的缓存并通知应用程序构建器您要使用它。同样,您可能有一个动态计算的重定向 URI。

能否添加以下代码, TokenCache userTokenCache = _tokenCacheProvider.SerializeCache(app.UserTokenCache,httpContext, claimsPrincipal);

请参考文档- .

如果仍然无法正常工作,正如您所说的那样,我们想知道您遇到了什么错误?