{"id":3501,"date":"2016-09-16T01:15:24","date_gmt":"2016-09-16T08:15:24","guid":{"rendered":"http:\/\/www.cloudidentity.com\/blog\/?p=3501"},"modified":"2016-09-16T01:19:19","modified_gmt":"2016-09-16T08:19:19","slug":"azure-ad-development-lands-on-portal-azure-com","status":"publish","type":"post","link":"https:\/\/www.cloudidentity.com\/blog\/2016\/09\/16\/azure-ad-development-lands-on-portal-azure-com\/","title":{"rendered":"Azure AD development lands on portal.azure.com"},"content":{"rendered":"<p>For the longest time, I watched with envy as my Azure colleagues drove their conference demos from the shiny portal.azure.com, while I had to stick with the good ol\u2019 manage.windowsazure.com.<\/p>\n<p>Well, guess what! Yesterday we announced that the Azure AD management features are finally appearing in preview in portal.azure.com. Jeff wrote an <a href=\"https:\/\/blogs.technet.microsoft.com\/enterprisemobility\/2016\/09\/12\/the-azuread-admin-experience-in-the-new-azure-portal-is-now-in-public-preview\/\">excellent post<\/a> about it, however, as it is in his nature, he focused on the administrative angle and relegated the development features to a paragraph tantamount to a footnote. That gave me enough motivation to break the blog torpor in which I\u2019ve slid into since finishing <a href=\"https:\/\/www.amazon.com\/Authentication-Directory-Applications-Developer-Reference\/dp\/0735696942\/ref=as_sl_pc_tf_til?tag=wwwcloudident-20&amp;linkCode=w00&amp;linkId=PPVHCRCDWQ4K4EJO&amp;creativeASIN=0735696942\">the book<\/a>, and pen for you this <em>totally unofficial<\/em> guide to the new awesome development features in portal.azure.com. Enjoy!<\/p>\n<h1>Basics<\/h1>\n<p>Let\u2019s take a look at this new fabulous portal, shall we. Pop out your favorite browser and navigate to <a title=\"https:\/\/portal.azure.com\" href=\"https:\/\/portal.azure.com\">https:\/\/portal.azure.com<\/a>.<\/p>\n<p>You\u2019ll land on a page like the below.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb.png\" alt=\"image\" width=\"955\" height=\"721\" border=\"0\" \/><\/a><\/p>\n<p>Where is Azure AD? Click on \u201cMore services\u201d on the left menu, and you\u2019ll find it:<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-1.png\" alt=\"image\" width=\"570\" height=\"925\" border=\"0\" \/><\/a><\/p>\n<p>Click on it, and the next blade will open to something to this effect:<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-2.png\" alt=\"image\" width=\"1200\" height=\"734\" border=\"0\" \/><\/a><\/p>\n<p>As Jeff\u2019s post <a href=\"https:\/\/blogs.technet.microsoft.com\/enterprisemobility\/2016\/09\/12\/the-azuread-admin-experience-in-the-new-azure-portal-is-now-in-public-preview\/\">explains<\/a>, the landing page offers lots of interesting insights on your Azure AD tenant, and various hooks for management actions.<\/p>\n<p>Just for kicks, let\u2019s take a look at the Azure AD landing page in the old portal:<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-3.png\" alt=\"image\" width=\"963\" height=\"721\" border=\"0\" \/><\/a><\/p>\n<p>The first thing that jumps to the eye: the old portal shows both VibroDirectory, the Azure AD tenant tied to my Azure subscription, and OsakaMVPDirectory, a test tenant I created when I visited Japan a couple of years ago (I need an excuse to get back there\u2026awesome place, awesome people). That\u2019s because the user I am signed in with, <a href=\"mailto:vibro@cloudidentity.net\">vibro@cloudidentity.net<\/a>, is a user (more: an admin) in both tenants.<br \/>\nI can easily choose what tenant I want to manage by clicking the corresponding entry.<\/p>\n<p>How do I achieve the same effect in portal.azure.com? Simple. See that user badge on the top right corner, informing you about what user and tenant are you currently signed in with? Click on it:<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-4.png\" alt=\"image\" width=\"221\" height=\"359\" border=\"0\" \/><\/a><\/p>\n<p>Together with the usual account operations you expect to find there, you\u2019ll also notice that all the tenants accessible by your user will be available for you to choose. Let\u2019s see what happens if I select OsakaMVPDirectory.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-5.png\" alt=\"image\" width=\"874\" height=\"644\" border=\"0\" \/><\/a><\/p>\n<p>Voila\u2019! The portal changed to reflect the new tenant. As you can see, the landing page is far more barren\u2026 I\u2019ve used that tenant just for playing a bit with Azure AD, nothing more.<\/p>\n<p>In fact, this is far more barren than you would probably expect from something displayed in an Azure portal\u2026 and here there\u2019s the kicker: that\u2019s because <strong><u>this tenant has no Azure subscription associated to it<\/u><\/strong>! Don\u2019t believe me? Click on all subscriptions.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border-width: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-6.png\" alt=\"image\" width=\"871\" height=\"280\" border=\"0\" \/><\/a><\/p>\n<p>That\u2019s right. This is huge, so let me rephrase to make sure you appreciate the implications:<\/p>\n<p align=\"center\"><strong><u><em>You now have a portal you can use to manage Azure AD tenants that are NOT associated to an Azure subscription.<\/em><\/u><\/strong><\/p>\n<p>The office developers among you are probably jumping up and down right now <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-smile\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/wlEmoticon-smile.png\" alt=\"Smile\" \/> go ahead, try it! Navigate to portal.azure.com and sign in with your office dev account for your Office tenant, I\u2019l wait. See? that\u2019s awesome!<\/p>\n<p>Now, don\u2019t get me wrong. Having Azure AD capabilities alongside all the other Azure services you are using in your solution is a huge advantage in itself and I am in no way trying to minimize that. I am just excited that the Azure AD development portal capabilities are no longer strictly subordinated to that.<\/p>\n<p>Enough of this \u2013 let\u2019s take a look at the meat of the developer features: application creation and editing.<\/p>\n<h1>App creation and editing<\/h1>\n<p>Let\u2019s go back to the Azure AD landing page on portal.azure.com. Where are the developer features? If you thought \u201cEnterprise applications\u201d \u2013 sorry, no bonus. The developer features are all available behind the sibylline moniker \u201cApp registrations\u201d. Click on it, and you\u2019ll find yourself on the following blade.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-7.png\" alt=\"image\" width=\"859\" height=\"683\" border=\"0\" \/><\/a><\/p>\n<p>Those are all the apps created in this tenant \u2013 that is applications for which the Application entity resides on this very tenant.<br \/>\nLet\u2019s compare with the same view on the old portal.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-8.png\" alt=\"image\" width=\"882\" height=\"690\" border=\"0\" \/><\/a><\/p>\n<p>Some important differences jump to the eye:<\/p>\n<ul>\n<li>The default view in the old portal lists apps I created in that tenant (\u201cKatanaWAAD_W8ClientSample\u201d \u2013 prehistory!!!) and also preintegrated apps (such as Google Apps, American Airlines) and multitenant apps acquired from my other test tenants. The new portal, as mentioned, only lists apps <em>developed <\/em>in this tenant.<\/li>\n<li>The new portal lists the application IDs, which are in fact the clientID you would find in your code for identifying the app; that should make it easier to find an entry for an app for which you have nothing but the code.<\/li>\n<li>The search field in the new portal is live \u2013 the list of apps adjusts in real time as you type the search string. I love it.<\/li>\n<\/ul>\n<p>Let\u2019s pick one app and see how it looks like.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-9.png\" alt=\"image\" width=\"1076\" height=\"465\" border=\"0\" \/><\/a><\/p>\n<p>The first blade, Essentials, presents a quick summary of the main properties of the app. The settings blade, which opens automatically as soon as you select the app, corrals all the app properties in a neat set of categories. There\u2019s even a nice search field that will show you in which bucket you\u2019ll find the property you need.<br \/>\nNearly all the old properties are there: the rather large image below shows the mapping between old and new. I recommend you click on the pic to display the full image.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/PortalMapping.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"PortalMapping\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/PortalMapping_thumb.png\" alt=\"PortalMapping\" width=\"562\" height=\"480\" border=\"0\" \/><\/a><\/p>\n<p>Most notably, the dev features in the new portal do not offer any of the operations that would affect the ServicePrincipal of your app \u2013 that is to say, the instance of the app in your own tenant. In the old portal, creating an app meant both creating an Application object (the blueprint of your app) and provisioning that app right away in your own tenant. In the new portal, creating an app means just creating the blueprint, the Application. The user assignment, app role assignments etc are available in the admin portion of the portal \u2013 but you\u2019ll be able to use those against your app only if you do provision it in your own tenant after creation.<br \/>\nIf you want to provision your app in your own tenant: you need to run it, attempt signing in with one user from your tenant with the right privileges, and granting consent when prompted. That will lead to the provisioning of the app, that is to say the creation of the ServicePrincipal in your tenant and the assignment of the permissions you consented to (VERY detailed description of the process in this <a href=\"https:\/\/www.microsoftpressstore.com\/articles\/article.aspx?p=2473127\">free chapter<\/a>).<\/p>\n<p>There are lots of neat features tucked in those options, especially in the ones that have been historically difficult to deal with in the old portal. Let\u2019s take a look at my two favorites: permission management and manifest editing.<\/p>\n<p>If you go to the Required permissions blade (finally a good name) and click on Add, you\u2019ll find yourself at the beginning of a nice guided experience:<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-10.png\" alt=\"image\" width=\"322\" height=\"604\" border=\"0\" \/><\/a><\/p>\n<p>Clicking on Select an API, I get to a clean list of what\u2019s available \u2013 even including a search box.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-11.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-11.png\" alt=\"image\" width=\"591\" height=\"604\" border=\"0\" \/><\/a><\/p>\n<p>Let\u2019s click on the Microsoft Graph and hit Select.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-12.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-12.png\" alt=\"image\" width=\"553\" height=\"768\" border=\"0\" \/><\/a><\/p>\n<p>Now, isn\u2019t that super neat! You get a nice list of permissions, subdivided by application and delegated\u2026 and you even get indications on what permissions can only be consented by administrators vs all users! Personally, the colors give me cognitive dissonance: as a developer who isn\u2019t often an admin, the permissions requiring admin consent are the problematic ones. But! The information is there, and that wasn\u2019t the case before.<\/p>\n<p>The other feature I really like, and I am sure it will be your favorite too, is the inline editing of the manifest.<br \/>\nAzure AD applications have lots of settings that can\u2019t be accessed via portal \u2013 and sometimes, it\u2019s just better to be able cut &amp; paste settings directly. For that purpose, the old portal offered the ability to download the app manifest (a JSON dump of the Application object, really), edit it locally, and re-upload it to apply changes.<br \/>\nIn the new portal, however, you can edit the manifest in place \u2013 no need to go through the download-edit-upload cycle! You can access the feature by going back to the Essentials blade and clicking on Edit manifest.<\/p>\n<p><a href=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image-13.png\"><img loading=\"lazy\" decoding=\"async\" style=\"background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;\" title=\"image\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/image_thumb-13.png\" alt=\"image\" width=\"1024\" height=\"548\" border=\"0\" \/><\/a><\/p>\n<p>There\u2019s even some rudimentary auto completion support, which is great for people like myself with non-existing memory for keywords.<\/p>\n<h1>Try it out!<\/h1>\n<p>As diligently reported by the header of each and every blade, this stuff is still in preview. Your input is always super valuable \u2013 the right place to provide it in this case is in the \u2018Admin Portal\u2019 section of our <a href=\"https:\/\/feedback.azure.com\/forums\/169401-azure-active-directory\/category\/162510-admin-portal\">feedback forum<\/a>.<\/p>\n<p>I hope you\u2019ll enjoy this feature as much as I plan to enjoy shedding my old portal complex and finally use portal.azure.com at the next conference\u2026 which by the way it\u2019s just 10 days away! <a href=\"https:\/\/myignite.microsoft.com\/sessions\/3087\">See you in Atlanta<\/a> <img decoding=\"async\" class=\"wlEmoticon wlEmoticon-smile\" src=\"https:\/\/www.cloudidentity.com\/blog\/wp-content\/uploads\/2016\/09\/wlEmoticon-smile.png\" alt=\"Smile\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>For the longest time, I watched with envy as my Azure colleagues drove their conference demos from the shiny portal.azure.com, while I had to stick with the good ol\u2019 manage.windowsazure.com. Well, guess what! Yesterday we announced that the Azure AD management features are finally appearing in preview in portal.azure.com. Jeff wrote an excellent&#8230;<\/p>\n","protected":false},"author":1,"featured_media":3492,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3501","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/3501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/comments?post=3501"}],"version-history":[{"count":2,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/3501\/revisions"}],"predecessor-version":[{"id":3503,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/posts\/3501\/revisions\/3503"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/media\/3492"}],"wp:attachment":[{"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/media?parent=3501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/categories?post=3501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudidentity.com\/blog\/wp-json\/wp\/v2\/tags?post=3501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}