<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Rajeev's Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/rajbugga/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/rajbugga/feed.xml</link>
    <description>Never Give up Because, Everything is Going To be Alright!</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:47:43 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Export All Azure Resources Tags</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/export-all-azure-resources-tags</link>
      <pubDate>Thu, 01 Mar 2018 01:11:15 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/?p=275</guid>
      <description><![CDATA[While playing the our customers Azure, I figured out that there is no way to identify the resource...]]></description>
      <content:encoded><![CDATA[While playing the our customers Azure, I figured out that there is no way to identify the resource types apart from the naming convention. When you need generate a report to understand your resources, tags comes handy.

We always end up creating VMs in Azure using a script or through UI and forget to add Tags. Azure Tags are very helpful to define the resources. You apply tags to your Azure resources to logically organize them by categories. Each tag consists of a name and a value. For example, you can apply the name "Environment" and the value "Production" to all the resources in production. Without this tag, you might have difficulty identifying whether a resource is intended for development, test, or production. However, "Environment" and "Production" are just examples. You define the names and values that make the most sense for organizing your subscription.

After you apply tags, you can retrieve all the resources in your subscription with that tag name and value. Tags enable you to retrieve related resources that reside in different resource groups. This approach is helpful when you need to organize resources for billing or management.

ref: https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-using-tags

Now, here is a PowerShell script I developed to dump all the resounces with their tags and value into an excel. I was able to populate this data in PowerBI to create a report which I will explain in the next article.

# This script loops through all azure subscriptions, resource groups and resources to print tags in an excel.
<div>
<div><span># Please create an empty excel file at C:\temp\tags.xlsx</span></div>
<div><span>Set-ExecutionPolicy</span><span> </span><span>-</span><span>ExecutionPolicy unrestricted </span><span>-</span><span>Force</span></div>
<div><span>$</span><span>excel</span><span> </span><span>=</span><span> </span><span>New-Object</span><span> </span><span>-</span><span>ComObject excel.application</span></div>
<div><span>$</span><span>excel</span><span>.visible</span><span> </span><span>=</span><span> </span><span>$</span><span>True</span></div>
<div><span>$</span><span>workbook</span><span> </span><span>=</span><span> </span><span>$</span><span>excel</span><span>.Workbooks.Add</span><span>()</span></div>
<div><span>$</span><span>workbook</span><span>.Worksheets.Add</span><span>()</span></div>
<div><span>$</span><span>Data</span><span>=</span><span> </span><span>$</span><span>workbook</span><span>.Worksheets.Item</span><span>(</span><span>1</span><span>)</span></div>
<div><span>$</span><span>Data</span><span>.Name</span><span> </span><span>=</span><span> </span><span>'MySpreadsheet'</span></div>
<div><span>#$file="C:\temp\Tags.csv"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>1</span><span>)</span><span> </span><span>=</span><span> </span><span>"Name"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>2</span><span>)</span><span> </span><span>=</span><span> </span><span>"ResourceId"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>3</span><span>)</span><span> </span><span>=</span><span> </span><span>"ResourceName"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>4</span><span>)</span><span> </span><span>=</span><span> </span><span>"ResourceType"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>5</span><span>)</span><span> </span><span>=</span><span> </span><span>"kind"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>6</span><span>)</span><span> </span><span>=</span><span> </span><span>"ResourceGroupName"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>7</span><span>)</span><span> </span><span>=</span><span> </span><span>"Location"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>8</span><span>)</span><span> </span><span>=</span><span> </span><span>"SubscriptionId"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>9</span><span>)</span><span> </span><span>=</span><span> </span><span>"Tags"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>10</span><span>)</span><span> </span><span>=</span><span> </span><span>"SKUName"</span></div>
<div><span>$</span><span>data</span><span>.Cells.Item</span><span>(</span><span>1</span><span>,</span><span>11</span><span>)</span><span> </span><span>=</span><span> </span><span>"SKUTier"</span></div>
<div><span>#$d = $data.UsedRange</span></div>
<div><span>#$d.Interior.ColorIndex = 19</span></div>
<div><span>#$d.Font.ColorIndex = 11</span></div>
<div><span>#$d.Font.Bold = $True</span></div>
<div><span>$</span><span>intRow</span><span> </span><span>=</span><span> </span><span>2</span></div>
<div><span>Login</span><span>-</span><span>AzureRmAccount</span></div>
<div><span>foreach</span><span>($</span><span>sub</span><span> </span><span>in</span><span> </span><span>Get-AzureRmSubscription</span><span>)</span></div>
<div><span>{</span></div>
<div><span> </span><span>Set-AzureRmContext</span><span> </span><span>-</span><span>Subscription </span><span>$</span><span>sub</span><span>.Id</span></div>
<div><span> </span><span>#$sub.Name </span></div>
<div><span> </span></div>
<div><span> </span><span>foreach</span><span> </span><span>($</span><span>res</span><span> </span><span>in</span><span> </span><span>Get-AzureRmResource</span><span>)</span></div>
<div><span> {</span></div>
<div><span>#$t=(Find-AzureRmResource -ResourceGroupNameEquals $res.ResourceGroupName -ResourceNameEquals $res.ResourceName).Tags</span></div>
<div><span>#$t.Keys</span></div>
<div><span>#$t.Values</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>1</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.Name</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>2</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.ResourceId</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>3</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.ResourceName</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>4</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.ResourceType</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>5</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.kind</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>6</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.ResourceGroupName</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>7</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.Location</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>8</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.SubscriptionId</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>11</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.sku.name</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>12</span><span>)</span><span> </span><span>=</span><span> </span><span>$</span><span>res</span><span>.sku.tier</span></div>
<div><span> </span><span>if</span><span>($</span><span>res</span><span>.Tags</span><span> </span><span>-ne</span><span> </span><span>$</span><span>null</span><span>)</span></div>
<div><span> {</span></div>
<div><span> </span><span>$</span><span>tag</span><span>=@()</span></div>
<div><span> </span><span>$</span><span>res</span><span>.Tags.GetEnumerator</span><span>()</span><span> </span><span>|</span><span> </span><span>ForEach-Object</span><span> {</span></div>
<div><span> </span><span>#[string]$key += $_.key+";"</span></div>
<div><span> </span><span>#[string]$value += $_.value+";"</span></div>
<div><span> </span><span>[string]</span><span>$</span><span>tag</span><span> </span><span>+=$</span><span>_</span><span>.key</span><span>+</span><span>"="</span><span>+$</span><span>_</span><span>.value</span><span>+</span><span>";"</span></div>
<div><span> </span><span>$</span><span>data</span><span>.Cells.Item</span><span>($</span><span>intRow</span><span>,</span><span> </span><span>9</span><span>)=$</span><span>tag</span></div>
<div><span> </span></div>
<div><span> }</span></div>
<div><span> </span><span>$</span><span>intRow</span><span> </span><span>=</span><span> </span><span>$</span><span>intRow</span><span> </span><span>+</span><span> </span><span>1</span><span> </span></div>
<div><span> }</span></div>
<div><span> }</span></div>
<div><span>}</span></div>
<div><span> </span></div>
<div><span>$</span><span>usedRange</span><span> </span><span>=</span><span> </span><span>$</span><span>Data</span><span>.UsedRange</span><span> </span></div>
<div><span>$</span><span>usedRange</span><span>.EntireColumn.AutoFit</span><span>()</span><span> </span><span>|</span><span> </span><span>Out-Null</span></div>
<div><span>$</span><span>workbook</span><span>.SaveAs</span><span>(</span><span>"C:\temp\tags.xlsx"</span><span>)</span></div>
<div><span>$</span><span>excel</span><span>.Quit</span><span>()</span></div>
<div><span> </span></div>
<div><span>$</span><span>a</span><span>.Save</span><span>()</span></div>
<div><span>$</span><span>a</span><span>.Close</span><span>()</span></div>
<div><span>$</span><span>Excel</span><span>.Quit</span><span>()</span></div>
<div><span>[System.Runtime.Interopservices.Marshal]</span><span>::ReleaseComObject</span><span>($</span><span>Excel</span><span>)</span></div>
<div><span>Stop-Process</span><span> </span><span>-</span><span>Name EXCEL </span><span>-</span><span>Force</span></div>
Please comment if you have any questions.

</div>]]></content:encoded>
    </item>
    <item>
      <title>Picture Sync from Office 365 to AD (PowerShell way)</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/picture-sync-from-office-365-to-ad-powershell-way</link>
      <pubDate>Tue, 16 May 2017 17:46:37 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/?p=235</guid>
      <description><![CDATA[Well, this came up when I was dealing with a Photo policy where the customer have Office365 and On...]]></description>
      <content:encoded><![CDATA[Well, this came up when I was dealing with a Photo policy where the customer have Office365 and On Premise applications such as SharePoint.  We all know that Pictures stored in Office365 cloud could be of resolution 648x648 (High Resolution pictures). If your organization has all the workloads in cloud, you are good because, Skype Online and SharePoint Online also supports this . The way Office 365 is configured, you would allow end users to upload their own pictures and it could take about 24 hours before its reflected in all the other workloads.

However, if you have on premise applications which depend on AD for picture sync, you need to automate the picture sync between AD and Office365 to ensure that you have the same picture across the workloads. Unfortunately, I couldn't see any tools that could be configured readily for this automation at schedules. So, I have decided to come up with a PowerShell script that does this for me. Well, most of you could write this too. But wanted to help those who are in need readily..:)

*************PowerShell Start***************
Download this module <a href="https://blogs.technet.microsoft.com/rajbugga/?attachment_id=245">resize-image</a> and rename the extension from .TXT to .psm1 and store it into the same share(share1)
<p style="text-align: left"><em>Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force</em></p>
<p style="text-align: left"><em>Import-Module \\share1\Resize-Image.psm1</em></p>
<p style="text-align: left"><em>rmdir \\Share1\O365Pictures\ -Force -Confirm:$false -Recurse</em></p>
<p style="text-align: left"><em>Start-Sleep -Seconds 30</em>
<em>mkdir \\Share1\O365Pictures\ -Force -Confirm:$false</em></p>
<p style="text-align: left"><em>#MSOnline Connection String#</em></p>
<p style="text-align: left"><em>Import-Module MSOnline</em></p>
<p style="text-align: left"><em>$User = "<strong>Office365GA@bugga.onmicrosoft.com</strong>"</em>
<em>$PWord = ConvertTo-SecureString -String "<strong>****</strong>" -AsPlainText -Force</em>
<em>$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $User, $PWord</em>
<em>Connect-MsolService -Credential $Credential</em>
<em>Remove-PSSession $ExSession</em>
<em>$ExSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/?proxymethod=rps -Credential $Credential -Authentication Basic -AllowRedirection</em>
<em>Import-PSSession $ExSession</em></p>
<p style="text-align: left"><em>#Pictures are Downloaded to#</em></p>
<p style="text-align: left"><em>$folderpath="\\Share1\O365Pictures\"</em></p>
<p style="text-align: left"><em>#Download all user profile pictures from Office 365:</em>
<em>New-Item -ItemType directory -Path $folderpath –force </em>
<em>$allUsers=Get-Mailbox -RecipientTypeDetails UserMailbox -ResultSize Unlimited|select UserPrincipalName,Alias</em>
<em>Foreach($user in $allUsers)</em>
<em>{</em>
<em>$path=$folderpath+$user.Alias+".Jpg"</em>
<em>$photo=Get-Userphoto -identity $user.UserPrincipalName -ErrorAction SilentlyContinue</em>
<em>If($photo.PictureData -ne $null)</em>
<em>{</em>
<em>[io.file]::WriteAllBytes($path,$photo.PictureData)</em>
<em>Write-Host $user.Alias “profile picture downloaded”</em>
<em>}</em>
<em>}</em></p>
<p style="text-align: left"><em>Remove-PSSession $ExSession</em></p>
<p style="text-align: left"><em>rmdir \\Share1\CroppedPictures\ -Force -Recurse -Confirm:$false</em>
<em>Start-Sleep -Seconds 30</em>
<em>mkdir \\Share1\CroppedPictures\ -Force -Confirm:$false</em></p>
<p style="text-align: left"><em>$Input="\\Share1\O365Pictures\"</em></p>
<p style="text-align: left"><em>#Output to store Resized images#</em>
<em>$output= "\\Share1\CroppedPictures\"</em></p>
<em>$users=Get-ChildItem $Input</em>
<p style="text-align: left"><em>foreach($user in $users)</em>
<em> {</em>
<em> $name=$user.Name</em>
<em> Resize-Image -InputFile $input$name -Width 96 -Height 96 -OutputFile $output$name</em>
<em> #$user.Name</em></p>
<p style="text-align: left"><em>}</em></p>
<p style="text-align: left"><em>$users=Get-ChildItem $output</em></p>
<p style="text-align: left"><em>foreach($user in $users)</em>
<em>{</em>
<em>$account=$user.Name.Split('.')[0]</em>
<em>$dom = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()</em>
<em>$root = $dom.GetDirectoryEntry()</em>
<em>$search = [System.DirectoryServices.DirectorySearcher]$root</em>
<em>$search.Filter = "(&amp;(objectclass=user)(objectcategory=person)(samAccountName=$account))"</em>
<em>$result = $search.FindOne()</em></p>
<p style="text-align: left"><em>if ($result -ne $null)</em>
<em>{</em>
<em>$userRe = $result.GetDirectoryEntry()</em>
<em>[byte[]]$jpg = Get-Content $input2$user -encoding byte</em>
<em>$userRe.put("thumbnailPhoto", $jpg )</em>
<em>$userRe.setinfo()</em>
<em>Write-Host $userRe.displayname " updated"</em>
<em>}</em>
<em>else {Write-Host $userRe " Does not exist"}</em>
<em>}</em></p>
<p style="text-align: left">Hope this helps. And make sure to use an account which has domain admin credentials or at least use an account that could have privileges to set the thumbnailPhoto.</p>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint - Cross Site Request Forgery (CSRF/XSRF) attacks</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/how-sharepoint-is-secured-from-cross-site-request-forgery-csrf-attacks</link>
      <pubDate>Sun, 15 May 2016 18:03:10 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/?p=195</guid>
      <description><![CDATA[Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions...]]></description>
      <content:encoded><![CDATA[Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they're currently authenticated. CSRF attacks specifically target state-changing requests, not theft of data, since the attacker has no way to see the response to the forged request. With a little help of social engineering (such as sending a link via email or chat), an attacker may trick the users of a web application into executing actions of the attacker's choosing. If the victim is a normal user, a successful CSRF attack can force the user to perform state changing requests like transferring funds, changing their email address, and so forth. If the victim is an administrative account, CSRF can compromise the entire web application.
<h3><span id="How_does_the_attack_work.3F" class="mw-headline">How does the attack work?</span></h3>
There are numerous ways in which an end user can be tricked into loading information from or submitting information to a web application. In order to execute an attack, we must first understand how to generate a valid malicious request for our victim to execute. Let us consider the following example: Alice wishes to transfer $100 to Bob using the <i>bank.com</i> web application that is vulnerable to CSRF. Maria, an attacker, wants to trick Alice into sending the money to her instead. The attack will comprise the following steps:
<ol>
	<li>building an exploit URL or script</li>
	<li>tricking Alice into executing the action with <a title="Social Engineering" href="https://www.owasp.org/index.php/Social_Engineering">social engineering</a></li>
</ol>
<h4><span id="GET_scenario" class="mw-headline">GET scenario</span></h4>
If the application was designed to primarily use GET requests to transfer parameters and execute actions, the money transfer operation might be reduced to a request like:
<pre>GET https://bank.com/transfer.do?acct=BOB&amp;amount=100 HTTP/1.1
</pre>
Maria now decides to exploit this web application vulnerability using Alice as her victim. Maria first constructs the following exploit URL which will transfer $100,000 from Alice's account to her account. She takes the original command URL and replaces the beneficiary name with herself, raising the transfer amount significantly at the same time:
<pre>https://bank.com/transfer.do?acct=MARIA&amp;amount=100000
</pre>
The <a title="Social Engineering" href="https://www.owasp.org/index.php/Social_Engineering">social engineering</a> aspect of the attack tricks Alice into loading this URL when she's logged into the bank application. This is usually done with one of the following techniques:
<ul>
	<li>sending an unsolicited email with HTML content</li>
	<li>planting an exploit URL or script on pages that are likely to be visited by the victim while they are also doing online banking</li>
</ul>
The exploit URL can be disguised as an ordinary link, encouraging the victim to click it:
<pre>&lt;a href="https://bank.com/transfer.do?acct=MARIA&amp;amount=100000"&gt;View my Pictures!&lt;/a&gt;
</pre>
Or as a 0x0 fake image:
<pre>&lt;img src="https://bank.com/transfer.do?acct=MARIA&amp;amount=100000" width="0" height="0" border="0"&gt;
</pre>
If this image tag were included in the email, Alice wouldn't see anything. However, the browser <i>will still</i> submit the request to bank.com without any visual indication that the transfer has taken place.

A real life example of CSRF attack on an application using GET was a <a class="external text" href="https://xs-sniper.com/blog/2008/04/21/csrf-pwns-your-box/" rel="nofollow">uTorrent exploit</a> from 2008 that was used on a mass scale to download malware.
<h4><span id="POST_scenario" class="mw-headline">POST scenario</span></h4>
The only difference between GET and POST attacks is how the attack is being executed by the victim. Let's assume the bank now uses POST and the vulnerable request looks like this:
<pre>POST https://bank.com/transfer.do HTTP/1.1

acct=BOB&amp;amount=100
</pre>
Such a request cannot be delivered using standard A or IMG tags, but can be delivered using a FORM tag:
<pre>&lt;form action="https://bank.com/transfer.do" method="POST"&gt;
&lt;input type="hidden" name="acct" value="MARIA"/&gt;
&lt;input type="hidden" name="amount" value="100000"/&gt;
&lt;input type="submit" value="View my pictures"/&gt;
&lt;/form&gt;
</pre>
This form will require the user to click on the submit button, but this can be also executed automatically using JavaScript:
<pre>&lt;body onload="document.forms[0].submit()"&gt;
&lt;form...</pre>
<pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height: 1.5">Other HTTP methods</span>
</pre>
Modern web application APIs frequently use other HTTP methods, such as PUT or DELETE. Let's assume the vulnerable bank uses PUT that takes a JSON block as an argument:
<pre>PUT https://bank.com/transfer.do HTTP/1.1

{ "acct":"BOB", "amount":100 }
</pre>
Such requests can be executed with JavaScript embedded into an exploit page:
<pre>&lt;script&gt;
function put() {
	var x = new XMLHttpRequest();
	x.open("PUT","https://bank.com/transfer.do",true);
	x.setRequestHeader("Content-Type", "application/json"); 
	x.send(JSON.stringify({"acct":"BOB", "amount":100})); 
}
&lt;/script&gt;
&lt;body onload="put()"&gt;
</pre>
Fortunately, this request will <b>not</b> be executed by modern web browsers thanks to <a class="new" title="Same-Origin Policy (page does not exist)" href="https://www.owasp.org/index.php?title=Same-Origin_Policy&amp;action=edit&amp;redlink=1">same-origin policy</a> restrictions. This restriction is enabled by default unless the target web site explicitly opens up cross-origin requests from the attacker's (or everyone's) origin by using <a title="HTML5 Security Cheat Sheet" href="https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet#Cross_Origin_Resource_Sharing">CORS</a> with the following header:

Access-Control-Allow-Origin: *

COPIED ABOVE EXAMPLE from https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF).

I have few customers who have complained about the app scanner complaining about some of the custom and OOB SharePoint page. So, i decided to test this thoroughly and here is what I have come up with:

When I’d looked at the GET and POST requests,

GET <a href="https://microsoft.sharepoint.com/teams/SPONA/Shared%20Documents/Forms/AllItems.aspx">https://sharepoint.com/teams/NA/Shared%20Documents/Forms/AllItems.aspx</a> HTTP/1.1

Accept: */*

Referer: <a href="https://microsoft.sharepoint.com/teams/SPONA/Lists/SPO%20NA%20T2%20CPE%20Analysis/AllItems.aspx?PageView=Shared&amp;InitialTabId=Ribbon.WebPartPage&amp;VisibilityContext=WSSWebPartPage">https://sharepoint.com/teams/NA/Lists/Analysis/AllItems.aspx?PageView=Shared&amp;InitialTabId=Ribbon.WebPartPage&amp;VisibilityContext=WSSWebPartPage</a>

Response has the below Canary value:

&lt;input type="hidden" name="<strong>__REQUESTDIGEST</strong>" id="__REQUESTDIGEST" value="<em>0x0A54D6ED3EFEF916EB4F223EE3ECAE429FD9A467E32E17EC1904B111462C345CC1BD670569370B7327A7FF4090A81465A5823E9FC2948C351CB1F91499A9832C,12 Mar 2016 18:27:50 -0000"</em> /&gt;

WebForm_InitCallback();var _spFormDigestRefreshInterval = 1440000;

I’d then uploaded a document to the SharePoint library and I could still track the same canary value there too.

POST <a href="https://microsoft.sharepoint.com/teams/SPONA/_layouts/15/upload.aspx?IsAJAX=1&amp;List=%7b82CBC5BE-0E08-4E81-B1BE-65852A651427%7d&amp;RootFolder=%2Fteams%2FSPONA%2FShared%20Documents">https://sharepoint.com/teams/NA/_layouts/15/upload.aspx?IsAJAX=1&amp;List={84CB65BE-0E08-4E81-B1BE-65852A651427}&amp;RootFolder=%2Fteams%2FNA%2FShared%20Documents</a> HTTP/1.1

Accept: */*

x-requestdigest: <em>0x0A54D6ED3EFEF916EB4F223EE3ECAE429FD9A467E32E17EC1904B111462C345CC1BD670569370B7327A7FF4090A81465A5823E9FC2948C351CB1F91499A9832C,12 Mar 2016 18:27:50 -0000</em>

ClientSource: MultiFileUploadDialog

Content-Type: multipart/form-data; boundary=---------------------------7dffe6f15b6

Response:

HTTP/1.1 200 OK

Set-Cookie: FedAuth=77u/PD94bW**************; expires=Tue, 17-Mar-2016 14:42:41 GMT; path=/; secure; HttpOnly

X-AspNet-Version: 4.0.30319

SPRequestGuid: b316f29c-a029-0000-252d-765f0416cabd

X-RequestDigest: <em>0x471DB2C0D2C3CA58E87CAC38EDFA08F1A63BD03F1A1B454EB5A16886F2BF908AEBDD123F55F0A9C5BE489AF025711D7152A91E00264FB14A77595429F1F4534A,12 Mar 2016 18:28:12 -0000</em>

<strong>X-FRAME-OPTIONS: SAMEORIGIN</strong>

<strong>X-Powered-By: ASP.NET</strong>

But the same wasn’t tracked when I loaded adminrecyclebin.aspx
When accessing the home page:
GET <a href="https://microsoft.sharepoint.com/teams/IGTSCSharePointOnline/SitePages/Welcome%20to%20SharePoint%20Oline%20Dashboard!.aspx">https://sharepoint.com/teams/Online/SitePages/Dashboard!.aspx</a> HTTP/1.1

Response has the below canary:

&lt;input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="0xF5EA17A429B1B52908BCC4E34D65E7F4E0C39CEE228CE4AA930BF132E4C9C99916627E46427D1E205634816F1E68112A93916ACCAC3222F07E1892A5F9E64BDB,12 Mar 2016 19:39:45 -0000" /&gt;

When accessed the adminrecyclebin.aspx page, I see the below traces:

GET <a href="https://microsoft.sharepoint.com/teams/IGTSCSharePointOnline/_layouts/15/AdminRecycleBin.aspx">https://sharepoint.com/teams/Online/_layouts/15/AdminRecycleBin.aspx</a> HTTP/1.1

&lt;input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="<em>0x9585697B2B7DAD7948FE350B2E4CCAAD26F83DDE13DB2BF9A2FDC8C7274837A6E576BCF97BB575BB0234E773BD444918CC61CCB8E33C8A395A63FE4F6A0A51E6,12 Mar 2016 19:39:55 -0000</em>" /&gt;

We could see that there is no canary value which is sent in the header but the request and response tracked via X-FRAME-OPTIONS: SAMEORIGIN

This explains on why we are seeing the CSRF issues while accessing the SharePoint OOB pages. We don't generate __REQUESTDIGEST values for some SharePoint OOB pages which have no POST actions.

The canary value is already present in a hidden <strong>__REQUESTDIGEST</strong> form element on every page that uses the SharePoint master page. It is automatically sent with every postback.

If you do not inherit from the SharePoint master page, you must use the <a href="https://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.formdigest.aspx">Microsoft.SharePoint.WebControls.FormDigest</a> control to write the value into the page. If you are making a web service call, you must get the <strong>__REQUESTDIGEST</strong> value and include it in the <strong>X-RequestDigest</strong> HTTP request header, as shown in the following example.

C#

var canaryValue = document.getElementById('__REQUESTDIGEST').value;request.SetRequestHeader("X-RequestDigest", canaryValue);

Ref: <a href="https://msdn.microsoft.com/en-us/library/office/gg552614(v=office.14).aspx">https://msdn.microsoft.com/en-us/library/office/gg552614(v=office.14).aspx</a>

SharePoint uses a dynamic canary to ensure that <span class="input">POST</span> requests come from the same domain as the server.

You must do two things on your custom pages and since SharePoint is ASP.NET backed, we've this implemented by default in OOB pages.
<ul>
	<li>Send the canary with every postback or web service request.</li>
	<li>Validate the canary before acting on the postback or web service request.</li>
</ul>
So, in your custom application/page which you build in top of SharePoint, ensure that you utilize &lt;SharePoint:FormDigest runat="server"/&gt; control in the master page or the page itself and track the POST requests by utilizing SPUtility.ValidateFormDigest(). This will ensure that the initiator is making the request through the same browser session is making the post back. If the Canary value isn't present or tapered, you would get a 401 Unauthorized error.

Dev Explanation for custom pages is in here:

https://www.codeproject.com/Articles/686881/Hack-Proof-Your-ASP-NET-Applica

https://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks

If you have any further questions, please comment in here or contact Microsoft Support]]></content:encoded>
    </item>
    <item>
      <title>SPO/ODB Reference</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/spoodb-reference</link>
      <pubDate>Thu, 02 Apr 2015 16:35:49 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/2015/04/02/spoodb-reference/</guid>
      <description><![CDATA[&nbsp;




OneDrive for Business and OneDrive (NGSC)

&nbsp;

	What is OneDrive for...]]></description>
      <content:encoded><![CDATA[&nbsp;

<b><span style="text-decoration: underline"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/ODB.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/ODB.png" alt=" " border="0" /></a>
</span></b>

<b><span style="text-decoration: underline">OneDrive for Business and OneDrive (NGSC)</span></b>

&nbsp;
<ul>
	<li><a href="https://office.microsoft.com/en-in/sharepoint-server-help/what-is-onedrive-for-business-HA102822076.aspx?CTT=5&amp;origin=HA104108286">What is OneDrive for Business?</a></li>
	<li><a href="https://office.microsoft.com/en-in/sharepoint-help/manage-storage-limits-for-onedrive-for-business-libraries-HA104108286.aspx?CTT=5&amp;origin=HA102694293">Manage storage limits for OneDrive for Business libraries</a></li>
	<li><a href="https://support.microsoft.com/kb/2933738">Restrictions and limitations related to syncing SharePoint libraries to your computer with OneDrive for Business</a></li>
	<li><a href="https://support.microsoft.com/common/survey.aspx?scid=sw;en;3790&amp;showpage=1">One Drive for Business- Sync Issues Guide</a></li>
	<li><a href="/b/wbaer/archive/2014/05/24/file-and-folder-considerations-with-onedrive-for-business.aspx">File and Folder Considerations with OneDrive for Business</a></li>
	<li>OneDrive for <a href="https://blogs.office.com/2015/01/28/onedrive-business-comes-mac-ios-devices/">Business</a> <a href="https://blogs.office.com/2015/01/28/onedrive-business-comes-mac-ios-devices/">comes</a> to Mac and iOS devices</li>
	<li><a title="https://support.office.com/en-us/article/Get-started-with-the-OneDrive-for-Business-Next-Generation-Sync-Client-in-Windows-615391c4-2bd3-4aae-a42a-858262e42a49" href="https://support.office.com/en-us/article/Get-started-with-the-OneDrive-for-Business-Next-Generation-Sync-Client-in-Windows-615391c4-2bd3-4aae-a42a-858262e42a49" target="_blank">Get started with the OneDrive for Business Next Generation Sync Client in Windows</a></li>
	<li><a title="Improve your OneDrive sync experience" href="https://support.office.com/en-us/article/Improve-your-OneDrive-sync-experience-7af500d9-a18e-4abb-8450-b94f4e52c1a0" target="_blank">Improve your OneDrive sync experience</a></li>
	<li><a title="Deploying the OneDrive for Business Next Generation Sync Client in an enterprise environment" href="https://support.office.com/en-us/article/Deploying-the-OneDrive-for-Business-Next-Generation-Sync-Client-in-an-enterprise-environment-3f3a511c-30c6-404a-98bf-76f95c519668" target="_blank">Deploying the OneDrive for Business Next Generation Sync Client in an enterprise environment</a></li>
	<li><a title="Transition from the previous OneDrive for Business sync client" href="https://support.office.com/en-us/article/Transition-from-the-previous-OneDrive-for-Business-sync-client-4100df3a-0c96-464f-b0a8-c20de34da6fa" target="_blank">Transition from the previous OneDrive for Business sync client</a></li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/SP1.jpg"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/SP1.jpg" alt=" " border="0" /></a>

<b><span style="text-decoration: underline">SharePoint Online</span></b>

&nbsp;
<ul>
	<li><a href="https://office.microsoft.com/en-in/sharepoint-help/whats-new-in-microsoft-sharepoint-online-HA104098441.aspx">What’s new in Microsoft SharePoint Online</a></li>
	<li><a href="https://technet.microsoft.com/en-us/library/sharepoint-online-service-description.aspx">SharePoint Online Service Description</a></li>
	<li><a title="SharePoint Online software boundaries and limits" href="https://support.office.com/en-us/article/SharePoint-Online-software-boundaries-and-limits-8f34ff47-b749-408b-abc0-b605e1f6d498" target="_blank">SharePoint Online: software boundaries and limits</a></li>
	<li><a href="https://office.microsoft.com/en-in/office365-sharepoint-online-enterprise-help/sharepoint-online-planning-guide-for-office-365-enterprise-and-midsize-HA101988931.aspx">SharePoint Online Planning Guide for Office 365 Enterprise and Midsize</a></li>
	<li><a href="https://support.microsoft.com/kb/2783484">Information about manual migration of SharePoint Online content</a></li>
	<li><a href="https://technet.microsoft.com/en-us/library/fp161362(v=office.15).aspx">Windows PowerShell for SharePoint Online</a></li>
	<li><a href="https://office.microsoft.com/en-in/sharepoint-help/introduction-to-the-sharepoint-online-management-shell-HA102915057.aspx">Introduction to the SharePoint Online Management Shell</a></li>
	<li><a href="https://technet.microsoft.com/en-us/library/fp161397(v=office.15).aspx">Windows PowerShell for SharePoint Online reference</a></li>
	<li><a href="https://technet.microsoft.com/en-us/library/fp161374(v=office.15).aspx">Windows PowerShell cmdlets to administer site collections in SharePoint Online</a></li>
	<li><a href="https://support.microsoft.com/kb/3027254">Information about changes to the SharePoint Online Public </a></li>
</ul>
<a href="https://support.microsoft.com/kb/3027254">Website feature</a>

<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/O365.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/O365.png" alt=" " border="0" /></a>

<b><span style="text-decoration: underline">Office 365:</span></b>

&nbsp;
<ul>
	<li><a href="https://blogs.office.com/">Office blogs</a></li>
	<li><a href="https://blogs.office.com/2014/09/12/office-365-news-round-4/">Office 365 news round-up</a></li>
	<li><a href="https://technet.microsoft.com/en-US/office365/fp123607">Office 365 service comparison</a></li>
	<li><a href="https://office.microsoft.com/en-in/products/office-365-roadmap-FX104343353.aspx">Office 365 Roadmap</a></li>
	<li><a href="https://office.microsoft.com/en-us/office365-suite-help/office-365-known-issues-HA102919011.aspx">Office 365 known issues</a></li>
	<li><a href="https://office.microsoft.com/en-us/business/office-365-trust-center-cloud-computing-security-FX103030390.aspx?redir=0#welcome">The Office 365 Trust Centre</a></li>
	<li><a href="https://technet.microsoft.com/en-us/library/hh373144.aspx">Office 365 URLs and IP address ranges</a></li>
	<li><a href="https://support.office.com/en-US/Article/Office-365-release-programs-3b3adfa4-1777-4ff0-b606-fb8732101f47?ui=en-US&amp;rs=en-US&amp;ad=US">Office 365 release programs</a></li>
	<li><a href="https://support.microsoft.com/common/survey.aspx?scid=sw;en-us;2222&amp;altStyle=MFE&amp;renderOption=OverrideDefault&amp;showpage=1&amp;fr=1&amp;nofrbrand=1">For any Comments and suggestions for O365, please visit the site mentioned below</a></li>
	<li><a href="https://technet.microsoft.com/en-us/library/office-365-system-requirements.aspx">Office 365 System Requirements</a></li>
</ul>
<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/fdbk.jpg"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/fdbk.jpg" alt=" " border="0" /></a>

<b><span style="text-decoration: underline">Feedback</span></b>
<ul>
	<li><strong><a title="SharePoint Experiences in Office365 and/or SharePoint Server" href="https://sharepoint.uservoice.com/" target="_blank">SharePoint Experiences in Office365 and/or SharePoint Server</a></strong></li>
	<li><a href="https://support2.microsoft.com/common/survey.aspx?scid=sw;en-us;2222&amp;altStyle=MFE&amp;renderOption=OverrideDefault&amp;showpage=1&amp;fr=1&amp;nofrbrand=1">Your feedback on improving office 365</a></li>
	<li><a href="https://office.microsoft.com/en-us/products/office-365-roadmap-FX104343353.aspx">Office 365 Roadmap </a></li>
	<li><a href="https://office365.uservoice.com/">Customer Feedback for Microsoft Office 365</a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>SharePoint 2013 - Unable to send emails to external email addresses (SharePoint 2013 workflows)</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/sharepoint-2013-unable-to-send-emails-to-external-email-addresses-sharepoint-2013-workflows</link>
      <pubDate>Tue, 15 Oct 2013 06:06:00 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/2013/10/15/sharepoint-2013-unable-to-send-emails-to-external-email-addresses-sharepoint-2013-workflows/</guid>
      <description><![CDATA[By default SharePoint Designer workflows creating using SharePoint 2013 Workflows will not sent...]]></description>
      <content:encoded><![CDATA[<p><strong>By default SharePoint Designer workflows creating using SharePoint 2013 Workflows will not sent emails to the external users (email addresses).&nbsp;</strong></p>
<p><strong>When you add a step "Email these users" in workflow and select type an external email address, you will receive a pop-up stating "The selected user(s) may not be valid on the site this workflow is published on. If a recipient is not a valid SharePoint user, he or she will not receive workflow emails."</strong></p>
<p><strong><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7446.wf.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7446.wf.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7446.wf.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7446.wf.png" alt="" border="0" /></a><br /></strong></p>
<p>This is by design behavior with SharePoint 2013 workflows where as the workflows you add from the SharePoint 2013 site (the workflows which are available as soon as you activate the features on the site collection or the site) have no impact as they are SharePoint 2010 workflows. With that said, the designer workflows created using SharePoint 2010 workflows will be working fine (including this functionality).</p>
<p>This is a security enhancement in SharePoint 2013 workflows to enable the users to get approval from the administrators before sending emails to the external users.&nbsp;</p>
<p><strong>How is this implemented?</strong></p>
<p>REST services validation.</p>
<p>For each and every user you add to the "email these users" in the designer creating using SharePoint 2013 workflows, a SOAP request is generated using the webservice (people.asmx) which calls ResolvePrincipals method to find the username. (_vti_bin/people.asmx?op=ResolvePrincipals).</p>
<p><span style="text-decoration: underline;"><strong>&nbsp;Request:</strong></span>&nbsp;</p>
<p>&lt;soap:Envelope xmlns:xsi="<a href="https://www.w3.org/2001/XMLSchema-instance" target="_blank">https://www.w3.org/2001/XMLSchema-instance</a>" xmlns:xsd="<a href="https://www.w3.org/2001/XMLSchema" target="_blank">https://www.w3.org/2001/XMLSchema</a>" xmlns:soap="<a href="https://schemas.xmlsoap.org/soap/envelope/" target="_blank">https://schemas.xmlsoap.org/soap/envelope/</a>"&gt;&lt;soap:Body&gt;&lt;ResolvePrincipals xmlns="<a href="https://schemas.microsoft.com/sharepoint/soap/" target="_blank">https://schemas.microsoft.com/sharepoint/soap/</a>"&gt;&lt;principalKeys&gt;&lt;string&gt;<a href="mailto:rajbugga@live.com%3c/string%3e%3c/principalKeys" target="_blank">rajbugga@live.com&lt;/string&gt;&lt;/principalKeys</a>&gt;</p>
<p>&lt;principalType&gt;All&lt;/principalType&gt;</p>
<p>&lt;addToUserInfoList&gt;false&lt;/addToUserInfoList&gt;</p>
<p>&lt;/ResolvePrincipals&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p><span style="text-decoration: underline;"><strong>Response:</strong></span></p>
<p>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;soap:Envelope xmlns:soap="<a href="https://schemas.xmlsoap.org/soap/envelope/" target="_blank">https://schemas.xmlsoap.org/soap/envelope/</a>" xmlns:xsi="<a href="https://www.w3.org/2001/XMLSchema-instance" target="_blank">https://www.w3.org/2001/XMLSchema-instance</a>" xmlns:xsd="<a href="https://www.w3.org/2001/XMLSchema" target="_blank">https://www.w3.org/2001/XMLSchema</a>"&gt;&lt;soap:Body&gt;&lt;ResolvePrincipalsResponse xmlns="<a href="https://schemas.microsoft.com/sharepoint/soap/" target="_blank">https://schemas.microsoft.com/sharepoint/soap/</a>"&gt;<strong><span style="color: #993300;">&lt;ResolvePrincipalsResult&gt;&lt;PrincipalInfo&gt;&lt;AccountName&gt;<a href="mailto:rajbugga@live.com%3c/AccountName%3e%3cUserInfoID%3e-1%3c/UserInfoID%3e%3cIsResolved%3efalse%3c/IsResolved%3e%3cMoreMatches" target="_blank"><span style="color: #993300;">rajbugga@live.com&lt;/AccountName&gt;&lt;UserInfoID&gt;-1&lt;/UserInfoID&gt;&lt;IsResolved&gt;false&lt;/IsResolved&gt;&lt;MoreMatches</span></a> /&gt;&lt;PrincipalType&gt;All&lt;/PrincipalType&gt;&lt;/PrincipalInfo&gt;&lt;/ResolvePrincipalsResult&gt;</span></strong>&lt;/ResolvePrincipalsResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&nbsp;<strong>MSDN reference</strong>:&nbsp;<span style="color: #0000ff;"><a href="https://msdn.microsoft.com/en-us/library/Microsoft.SharePoint.Utilities.SPUtility.SendEmail.aspx" target="_blank">https://msdn.microsoft.com/en-us/library/Microsoft.SharePoint.Utilities.SPUtility.SendEmail.aspx</a></span></p>
<p><strong>Here is how you should get this working:</strong></p>
<p>1.Edit the user profile properties in the user profile service application and add this external email address to one of the property. Please plan your user profile properties accordingly so that the next import doesn't override these fields that were updated &nbsp; &nbsp; &nbsp;with&nbsp;the external email address. Finally, run the User Profile to SharePoint full synchronization job which will sync all your site collections user info table with these email addresses.</p>
<p>Please confirm that the users email address is actually resolving the user ID by creating the SharePoint 2013 workflows:). The logic here is to make sure that the site to which you are publishing the workflows recognizes this email address (external). Forthat matter a new user who is in your AD but hasn't been added to the SharePoint site also faces the same problem. That's the reason we are so specific in using "VALID SHAREPOINT USER"</p>
<p>2.We strongly recommend you to use/experience the new Workflow Manager (Workflow Foundation 4.0 for SharePoint 2013) as its more robust and delivers best performance over 2010. (A new feature always has advantages:))</p>
<p>However, if you wanted to use 2010 workflows as well, here is the work around:</p>
<p>a.Create a workflow called Email using SharePoint 2010 workflows on the same list so that you could utilize the fields and then add Email these users step. Select the external email addresses here (SharePoint 2010 workflows doesn't validate user&nbsp; &nbsp;againstREST upon adding).</p>
<p>b.Design your 2013 workflows per your requirement but whenever you have to add a step "Email these users", call the 2010 workflow you just created before.&nbsp;</p>
<p>This way, your 2013 workflow does the job for you and where ever you are calling the 2010 workflow within 2013 that does deliver the emails to the external users also. I have tested this and it works greatly.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4786.wf1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/4786.wf1.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4786.wf1.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/4786.wf1.png" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p><strong>Reference:</strong> <a href="https://blogs.msdn.com/b/sharepointdesigner/archive/2012/08/18/how-to-trigger-a-sharepoint-2010-workflow-from-a-sharepoint-2013-workflow.aspx" target="_blank">https://blogs.msdn.com/b/sharepointdesigner/archive/2012/08/18/how-to-trigger-a-sharepoint-2010-workflow-from-a-sharepoint-2013-workflow.aspx</a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This article applies to SharePoint 2013 workflows. (Products: SharePoint 2013 &amp; SharePoint online)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>InfoPath -SharePoint 2007/2010/2013/SPO Configuration and troubleshooting</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/infopath-sharepoint-200720102013-configuration-and-troubleshooting</link>
      <pubDate>Wed, 07 Aug 2013 18:12:00 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/2013/08/07/infopath-sharepoint-200720102013-configuration-and-troubleshooting/</guid>
      <description><![CDATA[Update on SharePoint Online - InfoPath forms would work perfectly fine for the following web...]]></description>
      <content:encoded><![CDATA[<strong>Update on SharePoint Online - InfoPath forms would work perfectly fine for the following web services without going through any of the following steps: (We are experiencing some issues withe FEW SharePoint Online Tenants. If you are one of them, please hold, we are working on this and expected to have a fix soon).</strong>

Support kb (<a href="https://support.microsoft.com/en-in/kb/2674193">https://support.microsoft.com/en-in/kb/2674193</a>) still holds good when you are dealing with other web services. The following web service calls are converted into OM calls and that’s how we are bypassing the DOUBLE HOP issue. I tried using UserProfileService.asmx without having UDCX setup and it works fine. Only requirement is to have the users imported to UserProfiles.
<ul>
 	<li>lists.asmx</li>
</ul>
<ul>
 	<li>CheckOutFile</li>
 	<li>CheckInFile</li>
</ul>
<ul>
 	<li>usergroup.asmx</li>
</ul>
<ul>
 	<li>GetUserCollectionFromGroup</li>
 	<li>GetUserCollectionFromSite</li>
 	<li>GetGroupCollectionFromWeb</li>
</ul>
<ul>
 	<li>UserProfileService.asmx</li>
</ul>
<ul>
 	<li>GetUserProfileByName</li>
 	<li>GetUserPropertyByAccountName</li>
 	<li>GetCommonManager</li>
 	<li>GetUserMemberships</li>
 	<li>GetCommonMemberships</li>
</ul>
==============================================BELOW CONTENT STILL HOLDS GOOD FOR SHAREPOINT 2010/2013===================================================

SharePoint 2010 has both CLASSIC and CLAIMS based authentication and SharePoint 2013 has CLAIMS mode only (from UI)

Reference: <a href="https://technet.microsoft.com/en-s/library/cc262350(v=office.14).aspx#section2">https://technet.microsoft.com/en-s/library/cc262350(v=office.14).aspx#section2</a>

As InfoPath forms won’t work on a CLAIMS based web application, we have to follow the below steps to get it working:

<b>This holds good for SharePoint Server 2010 and SharePoint Server 2013</b>

Note: Screenshots are based on SharePoint Server 2013 but the same applies to SharePoint Server 2010 too.

We need User Profile Service Application to be configured and Secure Store Service Application to be created before following the below steps:

Reference: <a href="https://technet.microsoft.com/en-us/library/jj219646(v=office.15).aspx">https://technet.microsoft.com/en-us/library/jj219646(v=office.15).aspx</a>

<b>Step 1:</b>

* Create a new Secure Store Service application "APPID" (Say UPASSS).

* Update the fields as per the below picture: (Ticket Timeout depends on org. requirements)

* If you don’t choose Target Application Type as Group Ticket, none of the users apart from the user whose credential have been updated in the SSS APPID will be able to access the InfoPath form. This option "Group Ticket" enable us to specify ticket redeemers who usually be domain users. If you don’t select this option "IP will give you a descriptive error"

Reference: <a href="https://msdn.microsoft.com/en-us/library/ee554863(v=office.14).aspx">https://msdn.microsoft.com/en-us/library/ee554863(v=office.14).aspx</a>
<p dir="LTR" align="LEFT"><span style="color: #000000"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/6064.1.jpg"><span style="color: #000000"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/6064.1.jpg" alt=" " width="203" height="223" border="0" /></span></a></span></p>
* Update the secure store administrator/membership details as per the below screen shot: (again as per your org. requirement)
<p dir="LTR" align="LEFT"><span style="color: #000000"><span style="font-family: Wingdings;font-size: small"><span style="font-family: Wingdings;font-size: small"><span style="font-family: Wingdings;font-size: small"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4431.2.jpg"><span style="color: #000000"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4431.2.jpg" alt=" " width="332" height="116" border="0" /></span></a></span></span></span></span></p>
* Now, you have setup credential for the APPID (UPASSS) which you created above. This will be used to impersonate the user credentials as shown below:

(Windows username (Domain\User) and the password should be able to access the <a href="https://site/_vti_bin/userprofileservice.asmx">https://Site/_vti_bin/userprofileservice.asmx</a> of the respective site).
<p dir="LTR" align="LEFT"><span style="color: #000000"><span style="font-family: Wingdings;font-size: small"><span style="font-family: Wingdings;font-size: small"><span style="font-family: Wingdings;font-size: small"><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/8765.3.jpg"><span style="color: #000000"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/8765.3.jpg" alt=" " width="319" height="140" border="0" /></span></a></span></span></span></span></p>
We have completed setting up the Secure Store Service "APPID"

* Make sure that the accounts provided for the Secure Store Service have privileges to retrieve data through User Profile Service Application

<b>Step 2:</b>

* Create a blank new InfoPath form; add a data connection (https://site/_vti_bin/userprofileservice.asmx) using GetUserProfilebyName by UNCHECKING “Automatically retrieve data when form is opened”

* Decide where you want to store your universal data connection (UDC) file.

More about UDC: <a href="https://msdn.microsoft.com/en-us/library/office/ms772017(v=office.14).aspx">https://msdn.microsoft.com/en-us/library/office/ms772017(v=office.14).aspx</a>

* Convert the above created Data Connection (GetUserProfilebyName) as an UDCX file by selecting Relative to site collection or centrally managed and save it.

If you chose Relative to Site collection, you have to create a Data Connection library and chose this library while converting the UDCX file above. If you select Centrally Managed, you need to save the UDCX file and upload to the SharePoint Central Admin.

Data Connection Library:  <a href="https://msdn.microsoft.com/en-us/library/office/ms772101(v=office.14).aspx">https://msdn.microsoft.com/en-us/library/office/ms772101(v=office.14).aspx</a>

Chose the correct location to save the UDCX files: <a href="https://technet.microsoft.com/en-us/library/ff621104(v=office.14).aspx">https://technet.microsoft.com/en-us/library/ff621104(v=office.14).aspx</a>

* Download the copy of the UDCX file and edit it as shown below:

Working with Data Connections: <a href="https://msdn.microsoft.com/en-us/library/office/ms772364(v=office.14).aspx">https://msdn.microsoft.com/en-us/library/office/ms772364(v=office.14).aspx</a>

&lt;udc:Authentication&gt;&lt;udc:SSO AppId=’<b>UPASSA’</b> CredentialType=’<b>NTLM</b>’ /&gt; &lt;/udc:Authentication&gt;

AppID is the Secure Store Service AppId which was created on Step 1. Credential types explained here: <a href="https://msdn.microsoft.com/en-us/library/office/ms772017(v=office.14).aspx#sectionSection1">https://msdn.microsoft.com/en-us/library/office/ms772017(v=office.14).aspx#sectionSection1</a>

* Make sure to upload the UDCX file back to the CA or Data connection library and approve it.

* Now go to InfoPath form which you have started designing&gt;Data&gt;Form Load rule, add the following 2 rules:
<p dir="LTR" align="LEFT"><span style="color: #000000"> </span></p>
&nbsp;
<p dir="LTR" align="LEFT"><span style="color: #000000"> <a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7633.5.jpg"><span style="color: #000000"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7633.5.jpg" alt=" " width="253" height="219" border="0" /></span></a></span></p>
&nbsp;
<p dir="LTR" align="LEFT"><span style="color: #000000"> <a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/2664.6.jpg"><span style="color: #000000"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/2664.6.jpg" alt=" " width="297" height="97" border="0" /></span></a></span></p>
Username() function is available in SPS 2010 only post <a href="https://support.microsoft.com/kb/2516485">https://support.microsoft.com/kb/2516485</a>

We are all set to use the form now on claims authentication:

* Design your InfoPath form to pull the user profile information as you wish and publish it to the same site (site collection as we are using relative data connection).

<strong>Troubleshooting</strong>:

You are likely to face the below issues if you look at the ULS trace with the correlation ID:

* A certificate validation operation took ******.**** milliseconds and has exceeded the execution time threshold.

Add all Sharepoint Root Authority certificates and the web application SSL certificates (complete Chain) into the Trusted Certification Authorities store on all SharePoint servers and the SharePoint CA.

$SPCert = (Get-SPCertificateAuthority).RootCertificate $SPCert.Export(“Cert”) | Set-Content C:\SPCert.cer –Encoding Byte

If internet access is disabled, add "127.0.0.1 crl.microsoft.com" to the HOSTS file on each server

Setup DisableLoopbackCheck value to 1 on all the WFEs <a href="https://support.microsoft.com/kb/896861">https://support.microsoft.com/kb/896861</a>);

Add HOST file entry on each WFE in the farm pointing to itself to avoid the double hop issue. This applies to all the web applications that host the InfoPath form services and are making use of the web services.

Ex: Site: <a href="https://site.contoso.com/">https://site.contoso.com</a>
Host entry: 127.0.0.1 site.contoso.com

* Data adapter failed during OnLoad: The remote server returned an error: (500) Internal    Server Error. A user with the account name system could not be found. ---&gt; An error was encountered while retrieving the user profile. UserCannotBeFoundAn error was encountered while retrieving the user profile.

This happens when the account that you are trying to use is a SYSTEM ACCOUNT (due to name space query) / an account that cannot be found.

* The following data connection (GetUserProfileByName) has exceeded the maximum configured time limit. This threshold can be configured by using the SPIPFormsService -MaxDataConnectionRoundTrip PowerShell commandlet. This error is misleading sometimes as it can occur if we have proxy in IE or web.config

The following query failed: GetUserProfileByName (User: 0#.w|rajeev\administrator, Form Name: Repro-sp2013, IP: , Connection Target: <a href="https://sp2013-1r/DCL/GetUserProfileByName.udcx">https://sp2013-1r/DCL/GetUserProfileByName.udcx</a>, Request: <a href="https://sp2013-1r/_layouts/15/FormServer.aspx?XsnLocation=https://sp2013-1r/Reprosp2013/Forms/template.xsn&amp;SaveLocation=https://sp2013-1r/Reprosp2013&amp;ClientInstalled=false&amp;DefaultItemOpen=1&amp;Source=https://sp2013-1r/Reprosp2013/Forms/AllItems.aspx">https://sp2013-1r/_layouts/15/FormServer.aspx?XsnLocation=https://sp2013-1r/Reprosp2013/Forms/template.xsn&amp;SaveLocation=https://sp2013-1r/Reprosp2013&amp;ClientInstalled=false&amp;DefaultItemOpen=1&amp;Source=https://sp2013-1r/Reprosp2013/Forms/AllItems.aspx</a>, Form ID: urn:schemas-microsoft-com:office:infopath:Repro-sp2013:-myXSD-2013-07-09T06-28-47 Type: DataAdapterException, Exception Message: Authentication information in the UDC file could not be used for this connection because user forms are not allowed to use UDC authentication. To change this settings, use the InfoPath Forms Services configuration page in SharePoint Central Admin.)

Both the above settings have to be changed on the CA site. Go to the Configure InfoPath Forms Services section and enable Allow user form templates to use authentication information contained in data connection files and tweak the Data Connection Timeouts

* InfoPath also depends on the State Service and you may see the below error while opening the form:

Form render failed because the user's session was closed StackTrace:at Microsoft.Office.InfoPath.Server.Controls.XmlFormView.RenderForm(HtmlTextWriter writer)at Microsoft.Office.InfoPath.Server.Controls.XmlFormView.RenderContents(HtmlTextWriter writer

Please check the state service database and make sure that the InfoPath is able to use it. You can get the specific error details by getting verbose ULS logs.

&nbsp;

Explained: <a href="https://technet.microsoft.com/en-us/library/ee704548(v=office.14).aspx">https://technet.microsoft.com/en-us/library/ee704548(v=office.14).aspx</a>

* Form load issues (performance) is mostly due to the amount of data retrieved by the data connection from SharePoint while the form is opened (in Browser or client). We’ve made enough enhancements in SharePoint 2013 and are still making changes to enhance performance. So, speaking from SharePoint stand point, we need to be within the software guidelines: <a href="https://technet.microsoft.com/en-us/library/cc262787(v=office.15).aspx">https://technet.microsoft.com/en-us/library/cc262787(v=office.15).aspx</a>

&nbsp;

* InfoPath Forms Services do not work when you switch to a claims-based Web application that uses forms-based authentication or Security Assertion Markup Language (SAML) security tokens. These features do not work because claims-based authentication does not generate a Windows security token, which is necessary for these features. reference: <a href="https://technet.microsoft.com/en-us/library/hh706161.aspx" title="https://technet.microsoft.com/en-us/library/hh706161.aspx">https://technet.microsoft.com/en-us/library/hh706161.aspx </a>

SAML include - ADFS, Site Minder, Oracle, AD LDS, Okta etc.,.

* We could get UserProfileService.asmx working with SAML ONLY when you are using the InfoPath Rich Client (Filler) but doesn't work when you are using BROWSER based forms. To get this working in a web app which is using SAML authentication, you have to import users in the UserProfile Service Application with the same format.

Ex: If you search for a user in your userprofile service application, you usually see users account name as domain\user but to get this working, make sure to create a new sync connection with you SAML Authentication and set the CLAIM USER IDENTIFIER to your SAML in user properties.
<p dir="LTR" align="LEFT"><span style="color: #000000">Ps: Always try with a user account to test the behavior.</span></p>]]></content:encoded>
    </item>
    <item>
      <title>Creating Connected Web parts in SharePoint</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/creating-connected-web-parts-in-sharepoint</link>
      <pubDate>Thu, 25 Apr 2013 13:52:00 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/2013/04/25/creating-connected-web-parts-in-sharepoint/</guid>
      <description><![CDATA[&nbsp;
Recently I have come across a situation where we need a page&nbsp;which should be divided...]]></description>
      <content:encoded><![CDATA[<p><strong></strong>&nbsp;</p>
<p>Recently I have come across a situation where we need a page&nbsp;which should be divided into 2 parts where one half should have items and based on the item selection, you should get the details (Just like a HTML frame). Most&nbsp;of us will come across this situation and this will be handy and simple too in SharePoint without any coding or customization using SPD or VS</p>
<p>Example: when you select the Item1 you should see the Details&nbsp;of the item1. This should be dynamic that the items and the details should be rendered from a different location (say SharePoint lists)</p>
<p><br /> <a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/5700.1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/5700.1.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/5700.1.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/5700.1.png" alt=" " width="326" height="105" border="0" /></a><br />&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>We can achieve this scenario by using the connected webparts.</p>
<p>&nbsp;For this, you need 2 lists with at least one identical filed. In this scenario, I have created 2 lists (Items and Details)</p>
<p><strong>Items list</strong> has the&nbsp;following items in it:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/0880.2.bmp" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/0880.2.bmp"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/0880.2.bmp" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/0880.2.bmp" alt=" " width="223" height="85" border="0" /></a></p>
<p><strong>Details list</strong> has the following items in it:</p>
<p><br /> <a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4718.3.bmp" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/4718.3.bmp"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4718.3.bmp" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/4718.3.bmp" alt=" " border="0" /></a></p>
<p>Now, if you look at the lists, I have Title filed in common. Based on this I am going to create a connection between these 2 lists.</p>
<p>&nbsp;First, to have a great view, lets create 2 list web parts on a page and add these 2 lists (Items and Details) as shown below.</p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/1602.4.bmp" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/1602.4.bmp"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/1602.4.bmp" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/1602.4.bmp" alt=" " border="0" /></a></p>
<p>&nbsp;</p>
<p>Now on the items web part you see the below menu:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4377.5.bmp" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/4377.5.bmp"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/4377.5.bmp" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/4377.5.bmp" alt=" " border="0" /></a></p>
<p>Actions available in connected webparts are explained here:<a href="https://office.microsoft.com/en-us/sharepoint-server-help/connect-data-in-web-parts-HA101785157.aspx">https://office.microsoft.com/en-us/sharepoint-server-help/connect-data-in-web-parts-HA101785157.aspx</a></p>
<p>&nbsp;In this case I am using Send Row of Data To (I am using this option on Items list so, selecting an item in the items list should return the corresponding information from details).</p>
<p>You can also use Get Filter Values From but this has to be used on Details web part as we will get the details based on the items selected.</p>
<p>After selecting the Details<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7573.6.bmp" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7573.6.bmp"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7573.6.bmp" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7573.6.bmp" alt=" " width="152" height="22" border="0" /></a></p>
<p>&nbsp;I have configured Connection as per the below&nbsp;screen shot:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7723.7.bmp" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7723.7.bmp"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7723.7.bmp" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7723.7.bmp" alt=" " width="391" height="161" border="0" /></a></p>
<p>We have completed creating the connected web parts. Now, if you keep updating Items and Details lists provided that the list items created have a corresponding unique identifier (in this case Title), the web parts would render the information as expected.</p>
<p>You could see below that I selected Test which returned Rajeev1 from details as Rajeev1 item has Title value as Test in the details list.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/2275.8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/2275.8.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/2275.8.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/2275.8.png" alt=" " border="0" /></a></p>
<p>You could create and customize the exiting web parts using Visual Studio or SharePoint Designer to change the look and feel according to your requirement.</p>]]></content:encoded>
    </item>
    <item>
      <title>Configuring User Profile Service and BCS</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/configuring-user-profile-service-and-bcs</link>
      <pubDate>Fri, 12 Apr 2013 18:12:00 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/2013/04/12/configuring-user-profile-service-and-bcs/</guid>
      <description><![CDATA[Recently I have come across a situation where we need to configure SharePoint user profile...]]></description>
      <content:encoded><![CDATA[<p>Recently I have come across a situation where we need to configure SharePoint user profile synchronization to pull the Information from the BCS (Business Continuity Service) (External Data).</p>
<p>&nbsp;</p>
<p>The challenge was to pull the Information based on a custom attribute that was created in UPA service application which pulls the information from AD.</p>
<p>&nbsp;</p>
<p>We've a wonderful <strong><a title="https://www.microsoft.com/resources/technet/en-us/office/media/video/video.html?cid=stc&amp;from=mscomSTC&amp;videoid=ede7d855-035c-47a9-9492-1c2a23614a4a" href="https://blogs.technet.com/controlpanel/blogs/posteditor.aspx/video" target="_blank">video</a></strong> available on TechNet which will make your life easier when you have to play around UPA-BCS connection strings.</p>
<p>Video:&nbsp;<a href="https://www.microsoft.com/resources/technet/en-us/office/media/video/video.html?cid=stc&amp;from=mscomSTC&amp;videoid=ede7d855-035c-47a9-9492-1c2a23614a4a">https://www.microsoft.com/resources/technet/en-us/office/media/video/video.html?cid=stc&amp;from=mscomSTC&amp;videoid=ede7d855-035c-47a9-9492-1c2a23614a4a</a></p>
<p>This <strong><a title="UPA_BCS" href="https://www.microsoft.com/resources/technet/en-us/office/media/video/video.html?cid=stc&amp;from=mscomSTC&amp;videoid=ede7d855-035c-47a9-9492-1c2a23614a4a" target="_blank">video</a> </strong>explains you to create a BCS connection in User Profile Service application using the out of box AccountName which is what everyone use. But there are cases where the need be to use Custom attribute which is what we will discuss here.</p>
<p>&nbsp;</p>
<p>Create a new user property in the User Profile Service Application called <strong>Custom </strong>and map it with the Active Directory attribute (which may be any attribute that has the required value, using this value you will pull all the users/data from external system)</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/8468.1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/8468.1.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/8468.1.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/8468.1.png" alt="" width="403" height="66" border="0" /></a></p>
<p>I have mapped my Custom attribute in User Profile Properties page to a AD attribute called language</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/2728.2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/2728.2.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/2728.2.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/2728.2.png" alt="" width="431" height="44" border="0" /></a></p>
<p>All the users in my AD have an attribute called language whose values are unique and should be unique&nbsp;to be able to pull the right information pertaining to the user.</p>
<p>Make sure you do an incremental import for the custom attribute to be appeared in your user profiles.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/0243.3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/0243.3.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/0243.3.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/0243.3.png" alt="" width="465" height="103" border="0" /></a></p>
<p>I have a SQL database which has the below information:</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7875.4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7875.4.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/73/7875.4.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-73/7875.4.png" alt="" width="158" height="66" border="0" /></a></p>
<p>Now while creating a new BCS sync connection (follow the video to create new sync connection and mappings) Choose the CUSTOM attribute we've created by selecting the 1:1 mapping. We are almost done now. Just to confirm that we are able to pull the Information from the external data source, create a new user profile property in SharePoint which will retrieve the BCS data (Say property name as BCS-col2data, map it with the BCS connection and pull Col2 field from the database).</p>
<p>&nbsp;</p>
<p>Now start another incremental import. AD import should be quick but the BCS import may take time depending upon the number of profiles to be imported and mapped to SharePoint from external data source.</p>
<p>&nbsp;</p>
<p>Finally you should be able to see all the Information in the User Profiles (including the value that you've pulled from the BCS).</p>
<p>&nbsp;</p>
<p>Note: Since the video has all the steps (including creating BCS profile using SharePoint Designer and mappings, I have only explained the CUSTOM property mapping).</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Unable to load workflow actions from the server. Please contact your server administrator</title>
      <link>https://docs.microsoft.com/archive/blogs/rajbugga/unable-to-load-workflow-actions-from-the-server-please-contact-your-server-administrator</link>
      <pubDate>Fri, 12 Apr 2013 17:09:50 GMT</pubDate>
      <dc:creator><![CDATA[Rajeev Buggaveeti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/rajbugga/2013/04/12/unable-to-load-workflow-actions-from-the-server-please-contact-your-server-administrator/</guid>
      <description><![CDATA[When you try to open the workflows in the SharePoint Designer, you receive the below...]]></description>
      <content:encoded><![CDATA[<p>When you try to open the workflows in the SharePoint Designer, you receive the below error:</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/98/92/0714.error.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-98-92/0714.error.png"><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/98/92/0714.error.png" original-url="https://blogs.technet.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-98-92/0714.error.png" alt="" border="0" /></a></p>
<p><span style="text-decoration: underline;"><strong>Symptoms:</strong></span> You can access the workflow from the SharePoint UI. Other workflows in different web applications are editable.</p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;"><strong>Cause: </strong></span>Cannot be same&nbsp;in all the scenarios but should be specific to the features</p>
<p>&nbsp;</p>
<p><strong>Capture a fiddler trace while opening the SharePoint designer and you should see a 505 error with the below error tag:</strong></p>
<p>&nbsp;</p>
<p>&lt;errorstring xmlns="https://schemas.microsoft.com/sharepoint/soap/"&gt;Failed to find the XML file at location<br />&nbsp;&nbsp;&nbsp;&nbsp; '14\Template\Features\custom solution\feature.xml'&lt;/errorstring&gt;&lt;errorcode<br />&nbsp;&nbsp;&nbsp;&nbsp; xmlns="https://schemas.microsoft.com/sharepoint/soap/"&gt;0x80131600&lt;/errorcode&gt;&lt;/detail&gt;&lt;/soap:Fault&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>This is due to the feature which is not available at '14\Template\Features'. If you have a custom solution whose web parts are placed in a web site and the solution files are missing or the solution is retracted, you see this error.</p>
<p>&nbsp;</p>
<p><span style="text-decoration: underline;"><strong>Solution:&nbsp;</strong></span><strong>&nbsp;</strong>Remove the web parts that the solution&nbsp;adds to a site collection using&nbsp;PowerShell/code or deploy the solution back to the farm to get the feature.xml.</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>