不同 Url 的 Azure 加载项调用

Different Url's on Azure add-in call

谁能解释为什么从 SharePoint Online 使用 OpenIdConnectAuthentication 对 Azure 加载项的第一次调用具有 Url:

https://login.microsoftonline.com/tenantGuid/oauth2/authorize?client_id=xxx&response_mode=form_post&response_type=code+id_token&scope=openid+profile&state=OpenIdConnect.AuthenticationProperties%...

并且第二个调用有 Url

https://yyy.sharepoint.com/_layouts/15/online/cloudappsredirect.aspx?addintype=FileHandler&usemds=false&appurl=https%...&params

是否有可能从 Url2 也从第一次调用中获取参数?

编辑

从朋友和 GPX file handler 代码那里得到了提示。

在 OpenIdConnectAuthenticationOptions 的通知中,您可以指定 RedirectToIdentityProvider Func。这里可以把Query字符串的所有必要信息保存在cookie中,因为Session在这里不起作用。

RedirectToIdentityProvider = (context) =>
{
   var directoryAndFilenameReferrer = System.Web.HttpContext.Current.Request.UrlReferrer.Query.Split('&').Where(x => x.StartsWith("itemurl", StringComparison.Ordinal)).FirstOrDefault();
   var directoryAndFilename = System.Web.HttpUtility.UrlDecode(directoryAndFilenameReferrer).Split('/');
   context.Response.Cookies.Append("cookie_Filename", directoryAndFilename[directoryAndFilename.Length - 1]);
   return Task.FromResult(0);
}

之后别忘了删除 cookie。

简短的回答是:不,这是两种不同的服务,基于不同的信息集服务于不同的目的。

这似乎是一个文件处理程序应用程序。与任何其他应用程序一样,它是 "external" Microsoft 云工作负载(SharePoint、Exchange 等)因此它需要提供一些证据(令牌)表明它已被授权使用所需的工作负载(SharePoint/OneDrive 在这种情况下。)

第一个调用是对 Microsoft 企业云中唯一且唯一的授权服务 - 以验证应用程序(和用户)的凭据。其结果是授权令牌。此服务对驱动器和文件一无所知。

第二次调用是特定于文件的 - 您的应用程序必须发现它将处理的文件的 GET 和 PUT URL。该信息仅存储在 SharePoint/OneDrive 中。这就是为什么对 SharePoint/OneDrive 的调用是不可避免的。正如我上面提到的,此调用需要通过第一次调用获取的授权令牌。

如果您的问题是为什么 SharePoint 不生成自己的授权令牌,那么这是一个需要更长时间讨论的主题。简而言之,单独的授权服务允许应用程序通过单个用户身份验证和同意访问多个工作负载,并且不易出错。您可以在此处阅读有关 OAuth 2.0 的信息 - http://oauth.net/2/.