@@ -70,24 +70,62 @@ + (NSURL *)defaultBrokerCapableRedirectUri
7070 return [NSURL URLWithString: redirectUri];
7171}
7272
73- + (BOOL )redirectUriIsBrokerCapable : (NSURL *)redirectUri
73+ + (MSIDRedirectUriValidationResult )redirectUriIsBrokerCapable : (NSURL *)redirectUri
7474{
75+ if ([NSString msidIsStringNilOrBlank: redirectUri.absoluteString])
76+ {
77+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is nil or empty" );
78+ return MSIDRedirectUriValidationResultNilOrEmpty;
79+ }
80+
7581 NSURL *defaultRedirectUri = [MSIDRedirectUri defaultBrokerCapableRedirectUri ];
76-
82+
7783 // Check default MSAL format
7884 if ([defaultRedirectUri isEqual: redirectUri])
7985 {
80- return YES ;
86+ return MSIDRedirectUriValidationResultMatched ;
8187 }
82-
88+
8389 // Check default ADAL format
8490 if ([redirectUri.host isEqualToString: [[NSBundle mainBundle ] bundleIdentifier ]]
8591 && redirectUri.scheme .length > 0 )
8692 {
87- return YES ;
93+ return MSIDRedirectUriValidationResultMatched;
94+ }
95+
96+ // Add extra validation on why redirect_uri is not capable
97+ if ([redirectUri.scheme isEqualToString: @" http" ] || [redirectUri.scheme isEqualToString: @" https" ])
98+ {
99+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is (http(s)://host), and is not supported" );
100+ return MSIDRedirectUriValidationResultHttpFormatNotSupport;
101+ }
102+ else if ([redirectUri.host isEqualToString: @" auth" ] && [redirectUri.absoluteString hasPrefix: @" msauth" ])
103+ {
104+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is MSAL format, but bundle_id could mismatch" );
105+ return MSIDRedirectUriValidationResultMSALFormatBundleIdMismatched;
106+ }
107+ else if ([redirectUri.absoluteString hasPrefix: @" msauth" ])
108+ {
109+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is as (msauth.bundle_id), and auth host is missing" );
110+ return MSIDRedirectUriValidationResultMSALFormatHostNilOrEmpty;
111+ }
112+ else if ([NSString msidIsStringNilOrBlank: redirectUri.scheme])
113+ {
114+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is as (://host) without schema" );
115+ return MSIDRedirectUriValidationResultSchemeNilOrEmpty;
116+ }
117+ else if ([NSString msidIsStringNilOrBlank: redirectUri.host])
118+ {
119+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is as (scheme://) without host" );
120+ return MSIDRedirectUriValidationResultHostNilOrEmpty;
121+ }
122+ else if ([redirectUri.absoluteString isEqualToString: @" urn:ietf:wg:oauth:2.0:oob" ])
123+ {
124+ MSID_LOG_WITH_CTX (MSIDLogLevelVerbose, nil , @" MSIDRedirectUri validation: redirect_uri is urn:ietf:wg:oauth:2.0:oob, and not supported" );
125+ return MSIDRedirectUriValidationResultoauth20FormatNotSupport;
88126 }
89127
90- return NO ;
128+ return MSIDRedirectUriValidationResultUnknownNotMatched ;
91129}
92130
93131@end
0 commit comments