Forum Discussion
Project Online/SharePoint Online "401 Unauthorized" error when accessing oData URLs programatically
- May 09, 2018
Hi All,
Another work around is to generate a SharePoint client context and then grab the auth cookie from those credentials and pass it to the rest api request.
authCookie = creds.GetAuthenticationCookie()
req.Headers.Add(HttpRequestHeader.Cookie, authCookie);
Let me know if you need more details
Thanks
Dan
Hi Sunil,
Something has recently changed and you're not alone in this issue. It's been slowly rolling out to tenants this week :(
The issue is isolated to the rest apis, so if you can switch your code over to use the CSOM libraries then it will authenticate correctly.
ProjectContext pc = new ProjectContext(url)
We have escalated to Microsoft, if we hear of anything I'll update this post. Please let us know if you hear anything.
Thanks
Dan
I'm seeing something similar with a REST call in a workflow that creates a subsite. Get a "Forbidden."
So it has worked forever, and works on some sites...but not on new ones.
- Daniel ColarossiMay 09, 2018Copper Contributor
Hi All,
Another work around is to generate a SharePoint client context and then grab the auth cookie from those credentials and pass it to the rest api request.
authCookie = creds.GetAuthenticationCookie()
req.Headers.Add(HttpRequestHeader.Cookie, authCookie);
Let me know if you need more details
Thanks
Dan
- JOÃO LEITE BRAGANÇAMay 09, 2018Copper ContributorBut yes, Daniel, your suggestion does work!
Still I am curious on what is going on!- Daniel ColarossiMay 11, 2018Copper Contributor
Hi All,
I have just received a response from the product team that SharePoint Online no longer sends NTLM challenges on 401 responses.
Their suggestion was to use SPOIDCRL in the request headers.
So continue to authenticate with the sample code I provided earlier which does this.
I understand some of you are trying to do this in a SharePoint designer workflow. I'll try and create one this week and see if there is a way to do this for your workflows.
Thanks
Dan
- Mahidhar Venkata AravetiMay 09, 2018Copper Contributor
Hi Dan,
It seems the solution you have suggested is working. But I want to know whether Microsoft is fixing this issue or going forward we need to use different authentication mechanisms
Regards,
Mahidhar
- Daniel ColarossiMay 09, 2018Copper ContributorHI Mahidhar
I'm trying to chase up the same answer with Microsoft ( i dont work for them). Im chatting with their devs so as soon as i hear back ill post it here.
Thanks
Dan
- Sunil GuntupalliMay 09, 2018Copper Contributor
Daniel,
Thank you, i have tried your code and now its working.
Just FYI, here is the piece of updated code i have used.
SecureString passWord = new SecureString();
foreach (char c in m_Password.ToCharArray()) passWord.AppendChar(c);
var credentials = new SharePointOnlineCredentials("UserName, passWord);
string metaDataURL = "ProjectOnlineURL";
var req = (HttpWebRequest)WebRequest.Create(metaDataURL);
req.Credentials = credentials;req.Headers["X-FORMS_BASED_AUTH_ACCEPTED"] = "f";
req.Headers.Add(HttpRequestHeader.Cookie, credentials.GetAuthenticationCookie(new Uri(metaDataURL)));
var resp = (HttpWebResponse)req.GetResponse();Regards,
Sunil G.
- shruti vyasMay 09, 2018Copper Contributor
Thanks Sunil. Changing the header worked fine.