任何人都可以解释为什么对来自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%...¶ms
是否有可能从第一次调用中获取Url2的参数?
修改
从配偶和GPX file handler代码获得提示。
在OpenIdConnectAuthenticationOptions的通知中,您可以指定RedirectToIdentityProvider Func。在这里,您可以在Cookie中保存Query字符串的所有必要信息,因为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。
答案 0 :(得分:0)
简短的回答是:不,这是两种不同的服务,根据不同的信息集为不同的目的服务。
这似乎是一个文件处理程序应用程序。像任何其他应用程序一样,它是"外部"到Microsoft云工作负载(SharePoint,Exchange等)因此,它需要提供一些证据(令牌),它已被授权使用所需的工作负载(在这种情况下为SharePoint / OneDrive)。
第一个电话是Microsoft商业云中唯一的授权服务 - 验证应用(和用户)的凭据。结果是授权令牌。该服务对驱动器和文件一无所知。
第二个调用是特定于文件的 - 您的应用必须发现它将处理的文件的GET和PUT URL。该信息仅存储在SharePoint / OneDrive中。这就是为什么这次调用SharePoint / OneDrive是不可避免的。如上所述,此调用需要通过第一次调用获取的授权令牌。
如果您的问题是SharePoint没有生成自己的授权令牌的原因,那么这是一个需要进行更长时间讨论的主题。简而言之,单独的授权服务允许应用程序通过单个用户身份验证和同意来访问多个工作负载,并且不易出错。您可以在此处阅读有关OAuth 2.0的信息 - http://oauth.net/2/。