<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Single Sign-On Plugins</title><link>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins</link><description /><dc:language>en-US</dc:language><generator>14.0.0.586 14</generator><item><title>Single Sign-On Plugins</title><link>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins</link><pubDate>Tue, 04 Aug 2020 16:15:48 GMT</pubDate><guid isPermaLink="false">8d9b9158-32f4-413d-b40a-54f70dcb0580</guid><dc:creator>Former Member</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins#comments</comments><description>Current Revision posted to Developer Training by Former Member on 08/04/2020 16:15:48&lt;br /&gt;
&lt;p&gt;Single Sign-On (SSO) Plugins&amp;nbsp;allow you replace the authentication process&amp;nbsp;within Verint Community. &amp;nbsp;If you have an external application with its own custom authentication process you can use Single Sign On plugins to force Verint Community to use your custom authentication flow.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_Should_I_Create_An_Custom_SSO_Plugin" name="When_Should_I_Create_An_Custom_SSO_Plugin"&gt;&lt;/a&gt;When Should I Create An Custom SSO Plugin?&lt;/h2&gt;
&lt;p&gt;You only need to create a custom SSO extension if one of the below&amp;nbsp;extensions do not meet the needs of your application. &amp;nbsp;In most cases however, applications, especially web applications, can use the cookies authentication SSO extension by altering their authentication code to write the required cookie.&lt;/p&gt;
&lt;p&gt;The following extensions are already available as part of the Verint Community core product and can be configured in the&amp;nbsp;&lt;strong&gt;Administration&amp;nbsp;-&amp;gt; Authentication&lt;/strong&gt; area:&lt;/p&gt;
&lt;h3&gt;&lt;a id="Cookies_Authentication" name="Cookies_Authentication"&gt;&lt;/a&gt;[[Cookies Authentication]]&lt;/h3&gt;
&lt;p&gt;This allows a user to be logged in by a third party cookie. &amp;nbsp; The external application would create this cookie and Verint Community would recognize it and use to authenticate a user. &amp;nbsp;This module works for most web based applications if that application is capable of writing and encrypted cookie and exists on the same parent domain as your&amp;nbsp;Verint Community instance.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Forms_Authentication" name="Forms_Authentication"&gt;&lt;/a&gt;&lt;strong&gt;Forms Authentication&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This is specific to ASP.NET sites. &amp;nbsp;By default Verint Community uses Forms authentication so &amp;nbsp;it is capable of reading or sharing that authentication cookie with other ASP.net site using forms authentication provided each site has configured authentication the same.&lt;/p&gt;
&lt;h1&gt;&lt;a id="Creating_an_SSO_Extension" name="Creating_an_SSO_Extension"&gt;&lt;/a&gt;Creating an SSO Extension&lt;/h1&gt;
&lt;p&gt;The [[api-documentation:IAuthenticationPlugin Plugin Type|IAuthenticationPlugin]] interface essentially consists of one method:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public int? GetAuthenticatedUserId(AuthenticationOptions options)
{&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The AuthenticationOptions object wraps the HttpContext associated with the application request. We can extract it and do a sanity check before proceeding.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    HttpContextBase context = options.HttpContext;
    if (context == null)
        return null;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The HttpContext should hold everything you need to know to extract the identity of the requesting user. The implementation details here are based on your system and how it stores identity.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    // For instance, a certain cookie...
    HttpCookie cookie = context.Request.Cookies[&amp;quot;CookieName&amp;quot;];
    if (cookie == null)
        return null;

    // or the context ASP.net user.
    if (context.User == null || context.User.Identity == null || string.IsNullOrEmpty(context.User.Identity.Name))
        return null;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once you have the needed information to look up the user from Verint Community API, you can do that. If the user isn&amp;#39;t found, you do have the capability here to create a new user account in Verint Community using the API. This may be useful to do as a method of keeping Verint Community accounts in sync with the external system. Otherwise, you simply have to throw an error indicating the login attempt failed.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    var userApi = Apis.Get&amp;lt;IUsers&amp;gt;();

    User foundUser = userApi.Get(new UsersGetOptions { Username = &amp;quot;username&amp;quot; });

    if (foundUser == null)
    {
        // If the user doesn&amp;#39;t exist, you may want to create an account
        // if you are trying to stay synced with another system.

        // If not, you can throw an exception here about the login failing.
        throw new Exception(&amp;quot;Login Failed&amp;quot;);
    }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once the user is retrieved, the method requires you to return the user&amp;#39;s id for further use by Verint Community to fulfill the request.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    // Assuming a user was found, return the id for Community to use.
    return foundUser.Id;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the full sample implementation:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/4617_2E00_SampleAuthenticationPlugin_2E00_cs"&gt;community.telligent.com/.../4617_2E00_SampleAuthenticationPlugin_2E00_cs&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;a id="Using_An_External_Login_Process" name="Using_An_External_Login_Process"&gt;&lt;/a&gt;Using An External Login Process&lt;/h1&gt;
&lt;p&gt;The [[api-documentation:IExternalAuthenticationPlugin V2 Plugin Type|IExternalAuthenticationPlugin]] interface adds some additional url properties to allow use of custom/external pages for login control.&amp;nbsp;Use this type when you want&amp;nbsp;navigation&amp;nbsp;of the&amp;nbsp;account management process to be managed by a third party system. A ReturnUrl&amp;nbsp;callback is included so you can navigate&amp;nbsp;the user back to Verint Community once logged in. Note that use of [[api-documentation:IConfigurablePlugin Plugin Type|IConfigurablePlugin]] would be useful for allowing these properties to be edited in Administration without restarting the site.&lt;/p&gt;
&lt;p&gt;Most of the properties on this interface specify what urls Verint Community should send the user to for completing various actions: logging in, logging out, resetting password, creating an account, etc.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public string ChangePasswordUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string CreateUserUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string ForgottenPasswordUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string LoginUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string LogoutUrl
{
    get { return &amp;quot;&amp;quot;; }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The final property specifies what query string key&amp;nbsp;Verint Community will&amp;nbsp;use to add the return url to calls to your application. You then return the user to this url when the sign-in (or other) process is complete.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public string ReturnUrlParameter
{
    get { return &amp;quot;&amp;quot;; }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Single Sign-On Plugins</title><link>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins/revision/2</link><pubDate>Tue, 04 Jun 2019 20:37:35 GMT</pubDate><guid isPermaLink="false">8d9b9158-32f4-413d-b40a-54f70dcb0580</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins#comments</comments><description>Revision 2 posted to Developer Training by Ben Tiedt on 06/04/2019 20:37:35&lt;br /&gt;
&lt;p&gt;Single Sign-On(SSO) Plugins&amp;nbsp;allow you replace the authentication process&amp;nbsp;within Telligent Community. &amp;nbsp;If you have an external application with its own custom authentication process you can use Single Sign On plugins to force Telligent Community to use your custom authentication flow.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_Should_I_Create_An_Custom_SSO_Plugin" name="When_Should_I_Create_An_Custom_SSO_Plugin"&gt;&lt;/a&gt;When Should I Create An Custom SSO Plugin?&lt;/h2&gt;
&lt;p&gt;You only need to create a custom SSO extension if one of the below&amp;nbsp;extensions do not meet the needs of your application. &amp;nbsp;In most cases however, applications, especially web applications, can use the cookies authentication SSO extension by altering their authentication code to write the required cookie.&lt;/p&gt;
&lt;p&gt;The following extensions are already available as part of the Telligent Community core product and can be configured in the&amp;nbsp;&lt;strong&gt;Administration&amp;nbsp;-&amp;gt; Authentication&lt;/strong&gt; area:&lt;/p&gt;
&lt;h3&gt;&lt;a id="Cookies_Authentication" name="Cookies_Authentication"&gt;&lt;/a&gt;[[Cookies Authentication]]&lt;/h3&gt;
&lt;p&gt;This allows a user to be logged in by a third party cookie. &amp;nbsp; The external application would create this cookie and Telligent Community would recognize it and use to authenticate a user. &amp;nbsp;This module works for most web based applications if that application is capable of writing and encrypted cookie and exists on the same parent domain as your&amp;nbsp;Telligent Community instance.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Forms_Authentication" name="Forms_Authentication"&gt;&lt;/a&gt;&lt;strong&gt;Forms Authentication&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This is specific to ASP.NET sites. &amp;nbsp;By default Telligent Community uses Forms authentication so &amp;nbsp;it is capable of reading or sharing that authentication cookie with other ASP.net site using forms authentication provided each site has configured authentication the same.&lt;/p&gt;
&lt;h1&gt;&lt;a id="Creating_an_SSO_Extension" name="Creating_an_SSO_Extension"&gt;&lt;/a&gt;Creating an SSO Extension&lt;/h1&gt;
&lt;p&gt;The [[api-documentation:IAuthenticationPlugin Plugin Type|IAuthenticationPlugin]] interface essentially consists of one method:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public int? GetAuthenticatedUserId(AuthenticationOptions options)
{&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The AuthenticationOptions object wraps the HttpContext associated with the application request. We can extract it and do a sanity check before proceeding.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    HttpContextBase context = options.HttpContext;
    if (context == null)
        return null;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The HttpContext should hold everything you need to know to extract the identity of the requesting user. The implementation details here are based on your system and how it stores identity.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    // For instance, a certain cookie...
    HttpCookie cookie = context.Request.Cookies[&amp;quot;CookieName&amp;quot;];
    if (cookie == null)
        return null;

    // or the context ASP.net user.
    if (context.User == null || context.User.Identity == null || string.IsNullOrEmpty(context.User.Identity.Name))
        return null;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once you have the needed information to look up the user from Telligent Community API, you can do that. If the user isn&amp;#39;t found, you do have the capability here to create a new user account in Telligent Community using the API. This may be useful to do as a method of keeping Telligent Community accounts in sync with the external system. Otherwise, you simply have to throw an error indicating the login attempt failed.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    var userApi = Apis.Get&amp;lt;IUsers&amp;gt;();

    User foundUser = userApi.Get(new UsersGetOptions { Username = &amp;quot;username&amp;quot; });

    if (foundUser == null)
    {
        // If the user doesn&amp;#39;t exist, you may want to create an account
        // if you are trying to stay synced with another system.

        // If not, you can throw an exception here about the login failing.
        throw new Exception(&amp;quot;Login Failed&amp;quot;);
    }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once the user is retrieved, the method requires you to return the user&amp;#39;s id for further use by Telligent Community to fulfill the request.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    // Assuming a user was found, return the id for Community to use.
    return foundUser.Id;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the full sample implementation:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/4617_2E00_SampleAuthenticationPlugin_2E00_cs"&gt;community.telligent.com/.../4617_2E00_SampleAuthenticationPlugin_2E00_cs&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;a id="Using_An_External_Login_Process" name="Using_An_External_Login_Process"&gt;&lt;/a&gt;Using An External Login Process&lt;/h1&gt;
&lt;p&gt;The [[api-documentation:IExternalAuthenticationPlugin V2 Plugin Type|IExternalAuthenticationPlugin]] interface adds some additional url properties to allow use of custom/external pages for login control.&amp;nbsp;Use this type when you want&amp;nbsp;navigation&amp;nbsp;of the&amp;nbsp;account management process to be managed by a third party system. A ReturnUrl&amp;nbsp;callback is included so you can navigate&amp;nbsp;the user back to Telligent Community once logged in. Note that use of [[api-documentation:IConfigurablePlugin Plugin Type|IConfigurablePlugin]] would be useful for allowing these properties to be edited in Administration without restarting the site.&lt;/p&gt;
&lt;p&gt;Most of the properties on this interface specify what urls Telligent Community should send the user to for completing various actions: logging in, logging out, resetting password, creating an account, etc.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public string ChangePasswordUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string CreateUserUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string ForgottenPasswordUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string LoginUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string LogoutUrl
{
    get { return &amp;quot;&amp;quot;; }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The final property specifies what query string key&amp;nbsp;Telligent Community will&amp;nbsp;use to add the return url to calls to your application. You then return the user to this url when the sign-in (or other) process is complete.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public string ReturnUrlParameter
{
    get { return &amp;quot;&amp;quot;; }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Single Sign-On Plugins</title><link>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins/revision/1</link><pubDate>Tue, 04 Jun 2019 20:31:22 GMT</pubDate><guid isPermaLink="false">8d9b9158-32f4-413d-b40a-54f70dcb0580</guid><dc:creator>Ben Tiedt</dc:creator><comments>https://community.telligent.com/community/11/w/developer-training/63119/single-sign-on-plugins#comments</comments><description>Revision 1 posted to Developer Training by Ben Tiedt on 06/04/2019 20:31:22&lt;br /&gt;
&lt;p&gt;Single Sign-On(SSO) Plugins&amp;nbsp;allow you replace the authentication process&amp;nbsp;within Telligent Community. &amp;nbsp;If you have an external application with its own custom authentication process you can use Single Sign On plugins to force Telligent Community to use your custom authentication flow.&lt;/p&gt;
&lt;p&gt;[toc]&lt;/p&gt;
&lt;h2&gt;&lt;a id="When_Should_I_Create_An_Custom_SSO_Plugin" name="When_Should_I_Create_An_Custom_SSO_Plugin"&gt;&lt;/a&gt;When Should I Create An Custom SSO Plugin?&lt;/h2&gt;
&lt;p&gt;You only need to create a custom SSO extension if one of the below&amp;nbsp;extensions do not meet the needs of your application. &amp;nbsp;In most cases however, applications, especially web applications, can use the cookies authentication SSO extension by altering their authentication code to write the required cookie.&lt;/p&gt;
&lt;p&gt;The following extensions are already available as part of the Telligent Community core product and can be configured in the&amp;nbsp;&lt;strong&gt;Administration&amp;nbsp;-&amp;gt; Authentication&lt;/strong&gt; area:&lt;/p&gt;
&lt;h3&gt;&lt;a id="Cookies_Authentication" name="Cookies_Authentication"&gt;&lt;/a&gt;[[Cookies Authentication]]&lt;/h3&gt;
&lt;p&gt;This allows a user to be logged in by a third party cookie. &amp;nbsp; The external application would create this cookie and Telligent Community would recognize it and use to authenticate a user. &amp;nbsp;This module works for most web based applications if that application is capable of writing and encrypted cookie and exists on the same parent domain as your&amp;nbsp;Telligent Community instance.&lt;/p&gt;
&lt;h3&gt;&lt;a id="Forms_Authentication" name="Forms_Authentication"&gt;&lt;/a&gt;&lt;strong&gt;Forms Authentication&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;This is specific to ASP.NET sites. &amp;nbsp;By default Telligent Community uses Forms authentication so &amp;nbsp;it is capable of reading or sharing that authentication cookie with other ASP.net site using forms authentication provided each site has configured authentication the same.&lt;/p&gt;
&lt;h1&gt;&lt;a id="Creating_an_SSO_Extension" name="Creating_an_SSO_Extension"&gt;&lt;/a&gt;Creating an SSO Extension&lt;/h1&gt;
&lt;p&gt;The [[api-documentation:IAuthenticationPlugin Plugin Type|IAuthenticationPlugin]] interface essentially consists of one method:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public int? GetAuthenticatedUserId(AuthenticationOptions options)
{&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The AuthenticationOptions object wraps the HttpContext associated with the application request. We can extract it and do a sanity check before proceeding.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    HttpContextBase context = options.HttpContext;
    if (context == null)
        return null;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The HttpContext should hold everything you need to know to extract the identity of the requesting user. The implementation details here are based on your system and how it stores identity.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    // For instance, a certain cookie...
    HttpCookie cookie = context.Request.Cookies[&amp;quot;CookieName&amp;quot;];
    if (cookie == null)
        return null;

    // or the context ASP.net user.
    if (context.User == null || context.User.Identity == null || string.IsNullOrEmpty(context.User.Identity.Name))
        return null;&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once you have the needed information to look up the user from Telligent Community API, you can do that. If the user isn&amp;#39;t found, you do have the capability here to create a new user account in Telligent Community using the API. This may be useful to do as a method of keeping Telligent Community accounts in sync with the external system. Otherwise, you simply have to throw an error indicating the login attempt failed.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    var userApi = Apis.Get&amp;lt;IUsers&amp;gt;();

    User foundUser = userApi.Get(new UsersGetOptions { Username = &amp;quot;username&amp;quot; });

    if (foundUser == null)
    {
        // If the user doesn&amp;#39;t exist, you may want to create an account
        // if you are trying to stay synced with another system.

        // If not, you can throw an exception here about the login failing.
        throw new Exception(&amp;quot;Login Failed&amp;quot;);
    }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Once the user is retrieved, the method requires you to return the user&amp;#39;s id for further use by Telligent Community to fulfill the request.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;    // Assuming a user was found, return the id for Community to use.
    return foundUser.Id;
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the full sample implementation:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://community.telligent.com/cfs-file/__key/communityserver-wikis-components-files/00-00-00-12-83/SampleAuthenticationPlugin_2E00_cs"&gt;community.telligent.com/.../SampleAuthenticationPlugin_2E00_cs&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;&lt;a id="Using_An_External_Login_Process" name="Using_An_External_Login_Process"&gt;&lt;/a&gt;Using An External Login Process&lt;/h1&gt;
&lt;p&gt;The [[api-documentation:IExternalAuthenticationPlugin V2 Plugin Type|IExternalAuthenticationPlugin]] interface adds some additional url properties to allow use of custom/external pages for login control.&amp;nbsp;Use this type when you want&amp;nbsp;navigation&amp;nbsp;of the&amp;nbsp;account management process to be managed by a third party system. A ReturnUrl&amp;nbsp;callback is included so you can navigate&amp;nbsp;the user back to Telligent Community once logged in. Note that use of [[api-documentation:IConfigurablePlugin Plugin Type|IConfigurablePlugin]] would be useful for allowing these properties to be edited in Administration without restarting the site.&lt;/p&gt;
&lt;p&gt;Most of the properties on this interface specify what urls Telligent Community should send the user to for completing various actions: logging in, logging out, resetting password, creating an account, etc.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public string ChangePasswordUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string CreateUserUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string ForgottenPasswordUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string LoginUrl
{
    get { return &amp;quot;&amp;quot;; }
}

public string LogoutUrl
{
    get { return &amp;quot;&amp;quot;; }
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;The final property specifies what query string key&amp;nbsp;Telligent Community will&amp;nbsp;use to add the return url to calls to your application. You then return the user to this url when the sign-in (or other) process is complete.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="csharp"&gt;public string ReturnUrlParameter
{
    get { return &amp;quot;&amp;quot;; }
}&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>