我正在尝试创建一个多租户应用程序,该应用程序将允许用户访问其OneDrive。由于要运行该应用程序的设备的类型,让用户每次访问该应用程序时都输入用户名和密码是不切实际的,因此我将设置该应用程序,以便管理员可以代表用户授予权限的用户仅使用该应用程序的权限(我已完成管理员同意)。
我现在遇到的麻烦是,当用户访问该应用程序时,我只有他们的电子邮件地址。
我如何才能根据用户的电子邮件地址获取访问令牌,而无需他们登录(他们的管理员已经同意,因此用户也不必登录)?
答案 0 :(得分:0)
如果管理员已经同意,则可以使用可能性login without the user并检索令牌。
我如何获得OneDrive?
https://graph.microsoft.com/v1.0/users/{email address}
,并获取id
字段的值。https://graph.microsoft.com/v1.0/users/{user id}/drive
,您就拥有了用户的驱动力。答案 1 :(得分:0)
安迪
根据this reference,我们可以通过某些后台服务或守护程序获取AccessToken。
根据我的测试,我们可以尝试以下步骤:
1.获得管理员同意:
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
RedirectUri = redirectUri,
PostLogoutRedirectUri = redirectUri,
Scope = "openid profile",
ResponseType = "id_token",
TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, NameClaimType = "name" },
Notifications = new OpenIdConnectAuthenticationNotifications
{
AuthenticationFailed = this.OnAuthenticationFailedAsync,
SecurityTokenValidated = this.OnSecurityTokenValidatedAsync
}
});
ConfidentialClientApplication daemonClient = new ConfidentialClientApplication(Startup.clientId, string.Format(AuthorityFormat, tenantId), Startup.redirectUri,
new ClientCredential(Startup.clientSecret), null, appTokenCache.GetMsalCacheInstance());
AuthenticationResult authResult =等待daemonClient.AcquireTokenForClientAsync(new [] {MSGraphScope});
https://graph.microsoft.com/v1.0/users/{userPrincipalName}
。例如,https://graph.microsoft.com/v1.0/users/xxx.outlook.com
有关更多详细信息,我们可以在GitHub上参考v2.0 daemon sample。