gpt4 book ai didi

c# - 检索 Azure 用户访问的持久 token

转载 作者:行者123 更新时间:2023-12-02 23:57:50 29 4
gpt4 key购买 nike

我正在开发一个需要访问用户邮箱的项目(类似于 MS Flow 邮箱连接器的工作方式),这适合用户在网站上时使用,因为我可以从图表访问他们的邮箱以及正确的权限请求。我遇到的问题是我需要一个网络作业来在用户授予权限后持续监控他们的邮件文件夹。我知道我可以使用申请请求而不是委托(delegate)请求,但我怀疑我的公司是否会签署此请求。有没有办法在用户离开网站后持续持有 azure token 来访问用户信息。在网络工作中?

编辑

也许我误判了这一点,用户在 Web 应用程序中针对请求范围的 Azure 应用程序进行身份验证

let mailApp : PublicClientApplication = new PublicClientApplication(msalAppConfig);
let mailUser = mailApp.getAllAccounts()[0];
let accessTokenRequest = {
scopes : [ "User.Read", "MailboxSettings.Read", "Mail.ReadWrite", "offline_access" ],
account : mailUser,
}
mailApp.acquireTokenPopup(accessTokenRequest).then(accessTokenResponse => {
.....
}

这将返回经过身份验证的正确响应。

然后我想在控制台应用程序/Web 作业中使用此用户身份验证,我尝试这样做

var app = ConfidentialClientApplicationBuilder.Create(ClientId)
.WithClientSecret(Secret)
.WithAuthority(Authority, true)
.WithTenantId(Tenant)
.Build();

System.Threading.Tasks.Task.Run(async () =>
{
IAccount test = await app.GetAccountAsync(AccountId);
}).Wait();

但是 GetAccountAsync 总是返回 null?

最佳答案

@juunas 是正确的,根据需要刷新 token 并使用 AcquireTokenOnBehalfOf 函数。如果可能的话,他应该被认为是答案?

使用我的代码,返回的 idToken 可以在其他任何地方使用来访问资源。由于我的后端 WebJob 是连续的,因此我可以使用存储的 token 来访问资源并在 token 过期之前定期刷新 token 。

安加拉尔应用程序:

let mailApp : PublicClientApplication = new PublicClientApplication(msalAppConfig);
let mailUser = mailApp.getAllAccounts()[0];
let accessTokenRequest = {
scopes : [ "User.Read", "MailboxSettings.Read", "Mail.ReadWrite", "offline_access" ],
account : mailUser,
}
mailApp.acquireTokenPopup(accessTokenRequest).then(accessTokenResponse => {
let token : string = accessTokenResponse.idToken;
}

在后端,无论是在 API、webJob 还是控制台中:

var app = ConfidentialClientApplicationBuilder.Create(ClientId)
.WithClientSecret(Secret)
.WithAuthority(Authority, true)
.WithTenantId(Tenant)
.Build();

var authProvider = new DelegateAuthenticationProvider(async (request) => {
// Use Microsoft.Identity.Client to retrieve token
List<string> scopes = new List<string>() { "Mail.ReadWrite", "MailboxSettings.Read", "offline_access", "User.Read" };
var assertion = new UserAssertion(YourPreviouslyStoredToken);
var result = await app.AcquireTokenOnBehalfOf(scopes, assertion).ExecuteAsync();

request.Headers.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
});
var graphClient = new GraphServiceClient(authProvider);
var users = graphClient.Me.MailFolders.Request().GetAsync().GetAwaiter().GetResult();

关于c# - 检索 Azure 用户访问的持久 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69203466/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com