<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Authentication on DVLUP</title><link>/en/tags/authentication/</link><description>Recent content in Authentication on DVLUP</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 06 Dec 2018 00:00:00 +0000</lastBuildDate><atom:link href="/en/tags/authentication/index.xml" rel="self" type="application/rss+xml"/><item><title>LoginDialog for easy Live SDK OAuth</title><link>/en/blog/2018.12.06-logindialog-for-easy-live-sdk-oauth/</link><pubDate>Thu, 06 Dec 2018 00:00:00 +0000</pubDate><guid>/en/blog/2018.12.06-logindialog-for-easy-live-sdk-oauth/</guid><description>&lt;p&gt;Almost every developer I speak with agrees that getting a nicely working OAuth flow can be difficult. After much trial and error, I&amp;rsquo;ve built a UWP &lt;a href="https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.ContentDialog" target="_blank" rel="noopener"&gt;ContentDialog&lt;/a&gt;&#10; that makes this easy and has built-in refresh token support.&lt;/p&gt;&#10;&lt;h2 id="using-the-logindialog"&gt;Using the LoginDialog&lt;/h2&gt;&#10;&lt;p&gt;This is very simple to use, when the app launches, instantiate the dialog by passing your Live SDK ClientID and let the LoginDialog do the heavy lifting:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// Pass your app&amp;#39;s OAuth ClientId (sometimes called an AppId)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8be9fd"&gt;var&lt;/span&gt; loginDialog = &lt;span style="color:#ff79c6"&gt;new&lt;/span&gt; LoginDialog(&lt;span style="color:#f1fa8c"&gt;&amp;#34;YourAppClientId&amp;#34;&lt;/span&gt;);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// *** Perform login **** //&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// Case 1 - If the user was previously signed in, there is a refresh_token stored and no user-entered credentials are needed.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6272a4"&gt;// Case 2 - If the access token fails, or if it&amp;#39;s the first sign-in, the user will see a popup to enter credentials.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;await&lt;/span&gt; loginDialog.SignInAsync();&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ff79c6"&gt;if&lt;/span&gt;(!&lt;span style="color:#8be9fd"&gt;string&lt;/span&gt;.IsNullOrEmpty(loginDialog.Authentication))&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// This will be the access token you can use for API calls.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;var&lt;/span&gt; accessToken = loginDialog.Authentication;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6272a4"&gt;// Make your API calls with the accessToken, for example:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8be9fd"&gt;var&lt;/span&gt; user = &lt;span style="color:#ff79c6"&gt;await&lt;/span&gt; apiService.GetUserProfileAsync(accessToken);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This works just like a MessageDialog, but instead will show a WebView for the user to sign in, or automatically sign them in silently if they were previously logged in.&lt;/p&gt;</description></item></channel></rss>