Using an Office 365 SharePoint Online Hybrid Mysite solution
While recently working with one of my customers on configuring their Office 365 SharePoint Online Hybrid Mysite solution, we noticed some glitches to be aware of when pointing an on-premises farm (SP2010 and/or SP2013) directly to the
https://<tenantname>-my.sharepoint.com url as a Trusted MySite Host Location.
Yes the MySite/SkyDrive links will work fine...However certain operation like clicking on a users name under the "Modified By" column in an on-prem library
will fail with the following error
This is because SharePoint on-prem is passing the user context to Office 365 as accountname=DORADOJOES\elib
https://proseware-my.sharepoint.com/Person.aspx?accountname=Contoso\elib
rather than accountname=i:0#.f|membership|elib@doradojoes.com
https://proseware-my.sharepoint.com/Person.aspx?accountname=i:0#.f|membership|elib@contoso.com
To avoid this issue, you may want to implement a solution similar to the one below in which we provisioned a custom.aspx page (sample code below) in the on-premises SharePoint farm that performs a string manipulation against the accountname so its formatted properly before being passed to O365
- Drop that custom.aspx page into the Layouts directory on all on-prem SP servers,
- Then rather than pointing to https://<tenantname>-my.sharepoint.com url as a Trusted MySite Host Location, you point to https://<onpremMySiteHost>/_layouts/custom.aspx as the Trusted MySite Host Location instead.
NOTE: you will need to change <tenantname> to the actual name of your O356 tenant
ex. "https://contoso-my.sharepoint.com/Person.aspx?accountname="
<html>
<head>
<script language="CS" runat="server">
void Page_Load(object sender, System.EventArgs e)
{
try
{
string account = Request.QueryString["accountname"];
if(account != null)
{
// Extract domain and name of user from the account name
int stop = account.IndexOf("\\");
string domain = account.Substring(0, stop);
string user = account.Substring(stop + 1, account.Length - stop - 1);
// Construct the SPO URL to redirect to
string spoUser = String.Format("i:0#.f|membership|{0}@{1}.com", user, domain);
string spoUrl = "https://<tenantname>-my.sharepoint.com/Person.aspx?accountname=" + Server.UrlEncode(spoUser);
// Redirect to profile page in SPO
Response.Redirect(spoUrl);
}
}
catch
{
// Handle error as necessary
throw;
}
}
</script>
</head>
</html>
Go Cloud!!!