{"id":122,"date":"2018-09-28T06:07:13","date_gmt":"2018-09-28T06:07:13","guid":{"rendered":"http:\/\/fredborg.org\/?p=122"},"modified":"2018-10-03T11:41:29","modified_gmt":"2018-10-03T11:41:29","slug":"two-factor-authentication-step-2-master-service","status":"publish","type":"post","link":"https:\/\/fredborg.org\/?p=122","title":{"rendered":"Two Factor Authentication Step 2: Master Service"},"content":{"rendered":"<p>This is the third post in the series if you have not read the other post please consider to do so.<\/p>\n<p>In this post we will be building the foundation for our master service, and we will be creating a web service to create a token for our two factor authentication,<br \/>\nall the code in this post will be written in C# so you will need Visual Studio to follow these examples, and as always then all my code can be found on her on <a href=\"https:\/\/github.com\/dfredborg\/MasterServiceCSharpPlusTwoFactor\">GIT HUB<\/a><\/p>\n<p>First thing we have to do is create a new project in Visual Studio, I have called my project MasterDataService, when creating a new project in Visual Studio, there are a lot<br \/>\nof project types to choose from, but the one we need is called ASP.NET Web Application:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-125 size-full\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/NewProject.png\" alt=\"\" width=\"947\" height=\"195\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/NewProject.png 947w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/NewProject-300x62.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/NewProject-768x158.png 768w\" sizes=\"auto, (max-width: 947px) 100vw, 947px\" \/><\/p>\n<p>And then choose Blank with Web API:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-127 size-full\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebAPI.png\" alt=\"\" width=\"455\" height=\"361\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebAPI.png 455w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebAPI-300x238.png 300w\" sizes=\"auto, (max-width: 455px) 100vw, 455px\" \/><\/p>\n<p>This will create a new project which is ready to publish a web service, if you run this project it will automatically setup a IIS and show you a web site that is ready to handle your queries.<br \/>\nNow let us add some functionality to our web service, the first thing we have to do is add a reference to our NAV web service, to find our SOAP link you can go to your NAV and search for web services and here you should find our TwoFactor web service, now copy the SOAP link:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-129 size-full\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebService.png\" alt=\"\" width=\"2814\" height=\"82\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebService.png 2814w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebService-300x9.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebService-768x22.png 768w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebService-1024x30.png 1024w\" sizes=\"auto, (max-width: 2814px) 100vw, 2814px\" \/>\u00a0With the SOAP url in your clip board go back to your Visual Studio, and right click on the folder called service reference and click Add service reference:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-126\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/ServiceRefrence-300x217.png\" alt=\"\" width=\"300\" height=\"217\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/ServiceRefrence-300x217.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/ServiceRefrence.png 332w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>this will open a window where you have to click Advance, then Add Web Reference, then insert the NAV SOAP link, give your service a name and click add:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-128 \" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebRefrence.png\" alt=\"\" width=\"1036\" height=\"531\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebRefrence.png 1375w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebRefrence-300x154.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebRefrence-768x394.png 768w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/WebRefrence-1024x525.png 1024w\" sizes=\"auto, (max-width: 1036px) 100vw, 1036px\" \/><\/p>\n<p>This will generate a proxy class for communication with our NAV web service, now with the setup out of the way, let us get started. The first thing we have to do is create a new class called\u00a0TwoFactor in your model folder, which will look like this:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\npublic class TwoFactor\r\n{\r\npublic string UserName { get; set; }\r\npublic string LoginToken { get; set; }\r\npublic string SecretToken { get; set; }\r\n}\r\n<\/pre>\n<p>The next thing is to create a new controller this is done by right clicking Controller -&gt; Add-&gt; Controller:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-131 size-full\" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/add-ctrl.png\" alt=\"\" width=\"747\" height=\"213\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/add-ctrl.png 747w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/add-ctrl-300x86.png 300w\" sizes=\"auto, (max-width: 747px) 100vw, 747px\" \/><\/p>\n<p>And then choose Web API 2 Controller &#8211; Empty<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-132 \" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/emptyCtrl.png\" alt=\"\" width=\"797\" height=\"326\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/emptyCtrl.png 939w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/emptyCtrl-300x123.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/emptyCtrl-768x314.png 768w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/p>\n<p>And call the controller\u00a0TwoFactorController, and add the following method:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\npublic class TwoFactorController : ApiController\r\n{\r\n  public IHttpActionResult GetToken(string token)\r\n  {\r\n    TwoFactorService.TwoFactor_Service service = new TwoFactorService.TwoFactor_Service();\r\n    service.Url = @&quot;http:\/\/localhost:7047\/DynamicsNAV110\/WS\/CRONUS%20Danmark%20A%2FS\/Page\/TwoFactor&quot;;\r\n    NetworkCredential networkCredential = new NetworkCredential(@&quot;UserName&quot;, &quot;password&quot;);\r\n    \/\/service.UseDefaultCredentials = true;\r\n    service.Credentials = networkCredential;\r\n    List&lt;TwoFactorService.TwoFactor_Filter&gt; filterArray = new List&lt;TwoFactorService.TwoFactor_Filter&gt;();\r\n    TwoFactorService.TwoFactor_Filter tokenFilter = new TwoFactorService.TwoFactor_Filter();\r\n    tokenFilter.Field = TwoFactorService.TwoFactor_Fields.Secret_Token;\r\n    tokenFilter.Criteria = token;\r\n    filterArray.Add(tokenFilter);\r\n\r\n   TwoFactorService.TwoFactor&#x5B;] list = service.ReadMultiple(filterArray.ToArray(), null, 1);\r\n   if (list.Count() == 0)\r\n   {\r\n     return NotFound();\r\n   }\r\n   TwoFactor twoFactor = new TwoFactor();\r\n   Random random = new Random();\r\n   int tempToken = random.Next(10000,88888) + DateTime.Now.Second;\r\n   string secretToken = tempToken.ToString();\r\n   list&#x5B;0].Login_Token = secretToken;\r\n   service.Update(ref list&#x5B;0]);\r\n   twoFactor.UserName = list&#x5B;0].User_ID;\r\n   twoFactor.SecretToken = list&#x5B;0].Secret_Token;\r\n   twoFactor.LoginToken = list&#x5B;0].Login_Token;\r\n   return Ok(JsonConvert.SerializeObject(twoFactor));\r\n  }\r\n}\r\n<\/pre>\n<p>One thing to note here is that the name and type of our metode <strong>IHttpActionResult<\/strong> is a special type used for<br \/>\nweb requests, <strong>GetToken(string token)<\/strong> is the name that you must use to call the method and it takes a parameter<br \/>\nof type string, that will contain the Secret Token, which is used to find the correct record in NAV.<\/p>\n<p>Let us break the code down:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nTwoFactorService.TwoFactor_Service service = new TwoFactorService.TwoFactor_Service(); \r\nservice.Url = @&quot;http:\/\/localhost:7047\/DynamicsNAV110\/WS\/CRONUS%20Danmark%20A%2FS\/Page\/TwoFactor&quot;; \r\nNetworkCredential networkCredential = new NetworkCredential(@&quot;UserName&quot;, &quot;password&quot;); \r\nservice.Credentials = networkCredential;\r\n<\/pre>\n<p>This part sets up your connection to the NAV web service change the url to your own url, and in the<br \/>\nnetwork credentials enter a valid NAV user to run your service. Best practice is to create a windows service account for your web service communication. The next part will create a filter to send to your NAV:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nList&lt;TwoFactorService.TwoFactor_Filter&gt; filterArray = new List&lt;TwoFactorService.TwoFactor_Filter&gt;();\r\nTwoFactorService.TwoFactor_Filter tokenFilter = new TwoFactorService.TwoFactor_Filter();\r\ntokenFilter.Field = TwoFactorService.TwoFactor_Fields.Secret_Token;\r\ntokenFilter.Criteria = token;\r\nfilterArray.Add(tokenFilter);\r\nTwoFactorService.TwoFactor&#x5B;] list = service.ReadMultiple(filterArray.ToArray(), null, 1); \r\nif (list.Count() == 0)\r\n{\r\n  return NotFound();\r\n}\r\n<\/pre>\n<p>In the above code we set a filter on our NAV field Secret_Token based on what is passed to our web service. If we do not find<br \/>\na users based on the passed token, it will return an error.<\/p>\n<p>The next code handles what happens if we find a valid user based on the passed token:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nTwoFactor twoFactor = new TwoFactor(); \r\nRandom random = new Random(); \r\nint tempToken = random.Next(10000,88888) + DateTime.Now.Second; \r\nstring secretToken = tempToken.ToString(); \r\nlist&#x5B;0].Login_Token = secretToken; \r\nservice.Update(ref list&#x5B;0]); \r\ntwoFactor.UserName = list&#x5B;0].User_ID; \r\ntwoFactor.SecretToken = list&#x5B;0].Secret_Token; \r\ntwoFactor.LoginToken = list&#x5B;0].Login_Token; \r\nreturn Ok(JsonConvert.SerializeObject(twoFactor));\r\n<\/pre>\n<p>What the code above does is create an random token and writes it back to NAV, where after it returns the token as JSON which we will<br \/>\nuse in our mobile app in the next post. That is it, you are all set, now all you have to do is install your new Web App on an IIS and<br \/>\nyou have a working Two Factor Authentication, to test it open a browser and navigate to you web service url and pass the secret token<br \/>\nfrom your <strong>2 factor users<\/strong> in NAV, and it should result in something like this:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-138 \" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/json.png\" alt=\"\" width=\"1169\" height=\"117\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/json.png 1471w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/json-300x30.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/json-768x77.png 768w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/json-1024x102.png 1024w\" sizes=\"auto, (max-width: 1169px) 100vw, 1169px\" \/><br \/>\nYou can now use the LoginToken to login to your NAV, and if we look in your NAV you should see something like this:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-139 \" src=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/2FactUser.png\" alt=\"\" width=\"1221\" height=\"186\" srcset=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/2FactUser.png 2398w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/2FactUser-300x46.png 300w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/2FactUser-768x117.png 768w, https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/2FactUser-1024x156.png 1024w\" sizes=\"auto, (max-width: 1221px) 100vw, 1221px\" \/><br \/>\nAnd we are done for this post, the next post we will create the mobile app.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the third post in the series if you have not read the other post please consider to do&#8230; <a class=\"read-more\" href=\"https:\/\/fredborg.org\/?p=122\" rel=\"nofollow\"> Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":149,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-122","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","shapla-grid-item"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Two Factor Authentication Step 2: Master Service - Fredborg<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fredborg.org\/?p=122\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Two Factor Authentication Step 2: Master Service - Fredborg\" \/>\n<meta property=\"og:description\" content=\"This is the third post in the series if you have not read the other post please consider to do... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fredborg.org\/?p=122\" \/>\n<meta property=\"og:site_name\" content=\"Fredborg\" \/>\n<meta property=\"article:published_time\" content=\"2018-09-28T06:07:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-10-03T11:41:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"322\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"dfredborg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dfredborg\" \/>\n<meta name=\"twitter:site\" content=\"@dfredborg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"dfredborg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fredborg.org\/?p=122#article\",\"isPartOf\":{\"@id\":\"https:\/\/fredborg.org\/?p=122\"},\"author\":{\"name\":\"dfredborg\",\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"headline\":\"Two Factor Authentication Step 2: Master Service\",\"datePublished\":\"2018-09-28T06:07:13+00:00\",\"dateModified\":\"2018-10-03T11:41:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fredborg.org\/?p=122\"},\"wordCount\":1007,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"image\":{\"@id\":\"https:\/\/fredborg.org\/?p=122#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fredborg.org\/?p=122#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fredborg.org\/?p=122\",\"url\":\"https:\/\/fredborg.org\/?p=122\",\"name\":\"Two Factor Authentication Step 2: Master Service - Fredborg\",\"isPartOf\":{\"@id\":\"https:\/\/fredborg.org\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/fredborg.org\/?p=122#primaryimage\"},\"image\":{\"@id\":\"https:\/\/fredborg.org\/?p=122#primaryimage\"},\"thumbnailUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg\",\"datePublished\":\"2018-09-28T06:07:13+00:00\",\"dateModified\":\"2018-10-03T11:41:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fredborg.org\/?p=122#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fredborg.org\/?p=122\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fredborg.org\/?p=122#primaryimage\",\"url\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg\",\"contentUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg\",\"width\":600,\"height\":322},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fredborg.org\/?p=122#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/fredborg.org\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Two Factor Authentication Step 2: Master Service\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fredborg.org\/#website\",\"url\":\"https:\/\/fredborg.org\/\",\"name\":\"Fredborg\",\"description\":\"Business Central and Azure\",\"publisher\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fredborg.org\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d\",\"name\":\"dfredborg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png\",\"contentUrl\":\"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png\",\"width\":256,\"height\":256,\"caption\":\"dfredborg\"},\"logo\":{\"@id\":\"https:\/\/fredborg.org\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:fredborg.org\",\"https:\/\/www.linkedin.com\/in\/dfredborg\/\",\"https:\/\/x.com\/dfredborg\",\"https:\/\/www.youtube.com\/channel\/UCUNZglLDMjBlOK_T9JtI8UA\"],\"url\":\"https:\/\/fredborg.org\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Two Factor Authentication Step 2: Master Service - Fredborg","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fredborg.org\/?p=122","og_locale":"en_US","og_type":"article","og_title":"Two Factor Authentication Step 2: Master Service - Fredborg","og_description":"This is the third post in the series if you have not read the other post please consider to do... Read more","og_url":"https:\/\/fredborg.org\/?p=122","og_site_name":"Fredborg","article_published_time":"2018-09-28T06:07:13+00:00","article_modified_time":"2018-10-03T11:41:29+00:00","og_image":[{"width":600,"height":322,"url":"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg","type":"image\/jpeg"}],"author":"dfredborg","twitter_card":"summary_large_image","twitter_creator":"@dfredborg","twitter_site":"@dfredborg","twitter_misc":{"Written by":"dfredborg","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fredborg.org\/?p=122#article","isPartOf":{"@id":"https:\/\/fredborg.org\/?p=122"},"author":{"name":"dfredborg","@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"headline":"Two Factor Authentication Step 2: Master Service","datePublished":"2018-09-28T06:07:13+00:00","dateModified":"2018-10-03T11:41:29+00:00","mainEntityOfPage":{"@id":"https:\/\/fredborg.org\/?p=122"},"wordCount":1007,"commentCount":0,"publisher":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"image":{"@id":"https:\/\/fredborg.org\/?p=122#primaryimage"},"thumbnailUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fredborg.org\/?p=122#respond"]}]},{"@type":"WebPage","@id":"https:\/\/fredborg.org\/?p=122","url":"https:\/\/fredborg.org\/?p=122","name":"Two Factor Authentication Step 2: Master Service - Fredborg","isPartOf":{"@id":"https:\/\/fredborg.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/fredborg.org\/?p=122#primaryimage"},"image":{"@id":"https:\/\/fredborg.org\/?p=122#primaryimage"},"thumbnailUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg","datePublished":"2018-09-28T06:07:13+00:00","dateModified":"2018-10-03T11:41:29+00:00","breadcrumb":{"@id":"https:\/\/fredborg.org\/?p=122#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fredborg.org\/?p=122"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fredborg.org\/?p=122#primaryimage","url":"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg","contentUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2018\/09\/MasterTwoFactor.jpg","width":600,"height":322},{"@type":"BreadcrumbList","@id":"https:\/\/fredborg.org\/?p=122#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/fredborg.org\/"},{"@type":"ListItem","position":2,"name":"Two Factor Authentication Step 2: Master Service"}]},{"@type":"WebSite","@id":"https:\/\/fredborg.org\/#website","url":"https:\/\/fredborg.org\/","name":"Fredborg","description":"Business Central and Azure","publisher":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fredborg.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/fredborg.org\/#\/schema\/person\/59a5520cbf04c6bd1267f30b4488e71d","name":"dfredborg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/fredborg.org\/#\/schema\/person\/image\/","url":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png","contentUrl":"https:\/\/fredborg.org\/wp-content\/uploads\/2023\/06\/download.png","width":256,"height":256,"caption":"dfredborg"},"logo":{"@id":"https:\/\/fredborg.org\/#\/schema\/person\/image\/"},"sameAs":["https:fredborg.org","https:\/\/www.linkedin.com\/in\/dfredborg\/","https:\/\/x.com\/dfredborg","https:\/\/www.youtube.com\/channel\/UCUNZglLDMjBlOK_T9JtI8UA"],"url":"https:\/\/fredborg.org\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=122"}],"version-history":[{"count":10,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/122\/revisions"}],"predecessor-version":[{"id":142,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/posts\/122\/revisions\/142"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=\/wp\/v2\/media\/149"}],"wp:attachment":[{"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fredborg.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}