Submind YouTube summaries
Thumbnail for Okta Multibranding: Choosing the Right Architecture

Okta Multibranding: Choosing the Right Architecture

Watch on YouTube

Video summary

The video introduces Okta's multibranding capabilities within its customer identity platform, specifically addressing how enterprise organizations can tailor sign-in experiences for multiple subsidiaries or brands while operating within a single tenant. Historically, achieving distinct branding for different entities required custom-built solutions and complex API integrations, but Okta has evolved to support this use case natively through various approaches. The core of the discussion revolves around understanding the customization options available on the hosted sign-in page, which range from low-code editors to advanced HTML and CSS modifications. This flexibility allows companies to align their authentication interfaces with specific business objectives without needing to abandon the central Okta infrastructure. To determine the appropriate architecture for multibranding, the presentation categorizes contextual variables into three main groups: Okta context, code-based context, and external context. Okta context includes fixed values like the tenant domain and dynamic data such as application IDs and labels passed during the redirect request. External context encompasses information outside of Okta's direct control, such as user preferences stored in browser cookies or custom query parameters appended to redirect URLs. By leveraging these variables, developers can dynamically adjust the sign-in widget's appearance, ensuring that the correct logo, background image, and color scheme are displayed based on the specific brand or application initiating the login session. The decision-making process for selecting a multibranding strategy is guided by three critical questions: whether Single Sign-On (SSO) is required across multiple brands, the level of customization complexity needed, and the number of brands to support. If SSO is not necessary, organizations can utilize separate custom domains for each brand, allowing them to maintain unique visual identities without compromising security protocols. However, if SSO is essential, developers must use code-based logic within the Okta console to conditionally render different styles based on application metadata. The video highlights a scalability threshold where supporting more than five brands makes maintaining a large switch statement in the code editor inefficient; in such scenarios, it is recommended to host asset files externally on a CDN or remote repository and reference them dynamically via JavaScript to ensure the solution remains maintainable and scalable. In conclusion, Okta provides a flexible framework that adapts to varying multibranding requirements by balancing ease of use with deep customization potential. For simpler needs involving fewer brands without strict SSO requirements, the built-in code editor and domain separation are sufficient. As complexity increases or the number of brands grows beyond five, the architecture shifts toward dynamic asset management using external resources to avoid code bloat. Ultimately, organizations should evaluate their specific constraints regarding SSO necessity, brand count, and styling complexity to choose the most effective path forward, ensuring a seamless and branded user experience that scales with their business growth.
Read the full video transcript
Hello everyone. My name is Mark Vong and I'm part of our technical marketing team here at Octa. Today we're going to dive into multibranding in the Octa customer identity platform. More specifically, multibrand architecture. For those of you who have extensive experience integrating your applications with our platform, I'm sure you've noticed that there are quite a few customization options when it comes to the octa hosted signin page. More often than not, enterprise organizations prefer to completely style brand that sign-in experience so that it meets their business um objectives. Now, it's important to understand again reiterating the point here is that the Octoin page has quite a few customization options ranging from, you know, low code using our built-in editor to highly customizable, you know, editing your CSS, HTML, maybe even attaching your own stylesheets as well. Now for specifically the multibranding requirements such as let's say for an example we have a parent company who has two subsidiaries um it's you know they desire a separate login experience for each of these companies and they want to do this in a single octa tenant. Now, in the past, we would have had to maybe consider a more custom solution like building out our own sign-in pages for each company and then using the Octa APIs behind the scenes to provide authentication. That is no longer the case today. With the current evolution of the Octa hosted signin page, we can support this use case of multibranding with many different approaches. Now, while there are multiple ways to solve this problem, the decision to go down one route over the other really depends on a few factors. Now, on our Octoin page, we as the developers have access to a variety of different contextual variables that can help us determine how to style the widget or the page itself. These contextual controls can be categorized into two different group types. The first one is the octa context. Think about the octa context as really just information that's getting pulled directly from the octa or environment and its different resources. So think about applications maybe users um etc. The first sort of subcategory within the octa context are fixed controls. So what we mean by fixed controls are you know the tenant itself the octa tenant itself the octa tenant domain these are fixed values that are associated with the org and typically don't necessarily change all that often and they can be used in an effort to help style the signin experience uh to make it cater directly to you know the specific octa or the second type is what we call a codebased context. Now, these are a little bit more dynamic. They are still coming from the octa tenant. However, in this example, you'll see we're referencing the application ID, application label. These are values that are dynamic in the sense that you know the user starts on the application, they click a login button and then they get redirected to octa. As part of that initial call to that or that request to octa, we'll have the application's contextual information. So we'll have the application ID, the label, and we can use these pieces of metadata to in an effort to style the sign-in experience uh from the octa host signin um page itself. Now the second control I want to discuss would be the external context. These are sort of outside the control of octa. Um so these controls are typically managed and provided by you know example would be the application that the user is being redirected from or maybe the user's local environment before ordering the request to octa. Now when we talk about client side storage, so let's say that the user has some sort of preference stored in the browser uh in the form of maybe a cookie or local storage. Optic can leverage this piece of information to style the widget as well and that's why you're seeing that here as part of the external context. The other option would be URL parameters. So being able to pass custom query parameters when we're making that redirect to octa from our application uh we can embed it you know as part of the query string or even in the state or not parameters um so that we can use these elements within the widget to then style um and provide specific branding according to these elements. Now, this is a dilemma when we're talking about multibranding. Um, you know, typically, again, kind of going back to that use case that I just described, you know, a company that has maybe multiple subsidiaries or child companies, they want different um, branding scenarios or different login experiences. How do we best approach this? Um, it's important for us to remember three questions and these three questions are the ones that we're going to be answering to help us determine the right path forward. So the first one is do we need single sign on or SSO across multiple brands in applications? you know, if we do need SSO across multiple brands, then maybe the approach of using, you know, um, [clears throat] multiple domains within the octa tenant is not something that we can really use. It would just simply would not suffice because we can't SSO across multiple brands um, with different top level domains. Then that would push us to the next question. What level of brand customization is needed? So for maybe a low complexity, we can use the out ofthe-box code editor within the octa UI console to provide, you know, inline conditional uh statements to, you know, render the logo, the background image, etc. However, if it's a little bit more complex, we're going to have to go ahead and say, hey, how many brands do we need to support? If it's less than we determine arbitrary number called, you know, maybe five. If it's less than five, at this point in time, we're going to have to um or we can maybe still leverage the out of the box code editor, write custom logic to be able to render um and provide different specific styling elements within the sign-in widget. However, if it's more than five, at that point in time, you know, scalability is going to be an issue. we're going to have too much code in the code editor. That's when we need to consider maybe referencing um asset files that are hosted on our own CDN or some sort of remote repository. Now with that in mind, I do want to jump to a more visual demonstration to showcase how we go through the process of you know answering these three questions to come to terms with. Okay, great. This is the path forward with what how we're going to customize our signing widget. So let's go ahead and do that. Going to go ahead and do a quick switch of gears here. Okay. Amazing. All righty. So, this is our octa tenant. As you can see, we have uh quite a few users, groups, so applications. But the most important feature for us to focus on would be customizations. Let's go ahead and hit brands. And you'll see here I've defined um three custom brands for us to take a look at. Uh we have Iron Bank, Secure Bank, and Octa. Now for the first sort of question, right? Do we need SSO across multiple brands, multiple applications? If the answer is no, then you'll see each brand can have its own custom domain or set of custom domains. So, if I were to click on Iron Bank, for example, and then go to domains, you'll see I have my own vanity URL set up here where it's login.ironbank.mbuilt.com. And if I were to actually click on this, you'll see I get redirected to a customized sign-in experience. So this is still the Octa Hosta signin page, but it's now been branded with its own background image, color scheme, and logo. And you'll see that that's reflected in theme. So I'm actually inheriting or pulling the asset files um that are stored within Opta. So this is the logo, background, and then this is my color scheme. Now if I go ahead and do the same for secure bank for example, you'll see secure bank has its own set of assets. So we have its own logo, background image and color scheme. And if we go to the domains, you'll see it has its own domain as well. Same footprint, but it's login.securebank.mbuilt.com. Secure bank with its specificity. Now if I click login.securebank.m securebank.mnb.com. You'll see it has its own styling, its own branding. It's very unique, right, to secure bank, much different than Iron Bank. And again, to reiterate, they both have different domains. So, SSO will not work and will not be effective. But that's okay because our requirement initially was no SSO needed. Now let's say we do need SSO across you know our applications our brands however we still need that multibranding experience that is completely required let's go ahead and take a look at how that could be implemented so if I were to navigate to brands and then I click on opta you'll see I still have access to um you know the default logo background image uh color schemes. I can make edits here. And if I were to click on octa.mbuild.com, it will still inherit all the necessary files. Um but you'll see this background image is a little bit different. And that is because if I go back to pages and then I hit configure. Now you'll see we have this code editor. This is where it's um we're able to provide a more custom approach to styling our octa host signin page and this goes down the path of hey the user does need SSO. Okay, great. So now we have to figure out the complexity of the implementation. Um you know do we have to support multiple brands? Maybe we have five applications. Each application needs its own, you know, dedicated signin experience with its own styling elements. Um, if it gets to that point, you'll see I do have a custom function built here within the JavaScript get client ID with the octa util object. I have a function here called get request context. This returns this object here that essentially contains all the contextual information that's relevant to this request. So I know that if I'm redirecting to the octa host sign-in widget, uh in this context, I'll have access to the application itself as well as the application's ID. And that's exactly what I'm returning in this function. I want access to the client ID or the application ID so that I can leverage it to render a specific styling element. And if I were to come down here, this is where I'm calling the method or the function. Uh I'm placing it in a client ID itself. Now if the client ID does exist just as a you know precautionary check what I'm doing is I'm getting the login background image container and I'm leveraging a switch statement here. So if it matches this specific client ID, so I know that the user's coming from this application to my Octoin page, then I'll go ahead and change the background image to an image that I've uh I've sourced from from this um from this site. And there is also the default case here as well. Now this is only a single case as I was saying previously during the presentation. You know if we have to support more than five brands at that point in time scalability will be an issue. We don't want a switch statement with way too many cases that just doesn't scale well. Um, in those instances, we'll have to look to potentially, you know, hosting our asset files externally, maybe in our own CDN in some sort of remote repository, maybe even like an S3 bucket, and then referencing them directly in uh the JavaScript within our octa hosted uh sign-in page code editor. So in those instances, we've seen customers and developers maybe reference their files to include the client ID and then just pass it forward in the file name so that they can reference it in like a head tag uh or a link within the head tag uh and so forth. So again, there's quite a bit of flexibility, but the notion is we have to really think about those three questions, right? Is it going to be um you know SSO required across multiple brands, multiple applications? Do we need a high level of complexity when it comes to styling and branding? And if we, you know, if we do, then how many brands do we need to support? Because at some point in time and the number from our perspective would probably be five. Then you know at at that point it won't really be scalable to provide five different um you know switch case statements. Um then we'll have to go the route of a little bit something a little bit more dynamic having these external again files that we can reference within the JavaScript or um the HTML itself. Now, let's take a look at what this would be or I'm sorry, what this page would look like if I were to remove the switch statement. So, let's go ahead and hit edit. All I'm going to do is comment it out. So, we can see that the original background image should now populate. So, I'm going to go ahead and close that link. open this up and you'll see great the background image was changed back. So just as a quick recap right we had multiple brands within a single octa tenant we were able to solve for that use case. If SSO was not required we can have these two separate um you know brands exist well in theory all three do exist on separate domains um but you know SSO would not work across all three here. But if that's okay, then we can go the route of um you know using quite a bit of out of the box capabilities here and leveraging the domain as sort of a separation and uh distinguishment between uh different brands. If SSO is required for multiple brands or multiple applications, then we can actually go in here, go to our code editor and leverage custom logic and application metadata or any other contextual information that we can leverage to produce some sort of logical condition so that we can provide that logical rendering here or conditional rendering if you will. Uh and this is a very high level example of what you can do. Um and also important to understand that at some point in time for us the number is five. If there are more than five brands, we'll have to really consider um you know referencing those remote asset files that are stored elsewhere externally um so that we can maintain a level of scale that will work best in our production environment. Now I do appreciate the time and if there are any questions please let us know. Our documentation does have a very very strategic uh sort of decision flow diagram that the team put together to kind of walk through the decision-m process that is very comprehensive and um I found it to be helpful personally and ultimately helped me you know sort of put this together uh in an effort to you know walk you guys through and guide us through the process. So I do appreciate the time. Thank you so much. If there are any questions, uh, you know, feel free to reach out to us. And in the meantime, keep on building. Thank you.