注意:我使用的是微软最新adal的实验性预发行版
我正试图让我的身份提供者在移动应用程序上工作。到目前为止,我已经能够加载我的身份提供程序,并设法获得登录页面显示(除了facebook)。
问题是,每当我实际尝试登录我得到一些错误的形式关闭"无效的重定向uri"。
例如,Google会说:"请求中的重定向URI: https://login.microsoftonline.com/…不匹配已注册的重定向URI。Facebook将显示:"给定的URL是不允许的应用程序配置:一个或多个给定的URL是不允许的应用程序的设置。它必须与网站URL或Canvas URL匹配,或者该域名必须是应用程序的一个域名的子域名。"
据我所知,你实际上不再需要向不同的身份提供者注册移动应用程序,因为Azure位于你和他们之间。Azure处理连接,获取你的令牌并使用它来识别你。然后它应该返回一组"azure令牌"给你。
据我所知,所使用的重定向URI是在门户上注册的,因为我能够首先加载标识提供程序?更不用说它似乎是许多应用程序使用的默认URL: urn:ietf:wg:oauth:2.0:oob
,它只是告诉它返回到一些非基于浏览器的应用程序?
这是我实际用来登录/注册的代码:
private static String AUTHORITY_URL = "https://login.microsoftonline.com/<directory>/oauth2/authorize/";
private static String CLIENT_ID = "my_client_id";
private static String[] SCOPES = { "my_client_id" };
private static String[] ADDITIONAL_SCOPES = { "" };
private static String REDIRECT_URL = "urn:ietf:wg:oauth:2.0:oob";
private static String CORRELATION_ID = "";
private static String USER_HINT = "";
private static String EXTRA_QP = "nux=1";
private static String FB_POLICY = "B2C_1_<your policy>";
private static String EMAIL_SIGNIN_POLICY = "B2C_1_SignIn";
private static String EMAIL_SIGNUP_POLICY = "B2C_1_SignUp";
public async Task<AuthenticationResult> Login(IPlatformParameters parameters, bool isSignIn)
{
var authContext = new AuthenticationContext(AUTHORITY_URL, new TokenCache());
if (CORRELATION_ID != null &&
CORRELATION_ID.Trim().Length != 0)
{
authContext.CorrelationId = Guid.Parse(CORRELATION_ID);
}
String policy = "";
if (isSignIn)
policy = EMAIL_SIGNIN_POLICY;
else
policy = EMAIL_SIGNUP_POLICY;
return await authContext.AcquireTokenAsync(SCOPES, ADDITIONAL_SCOPES, CLIENT_ID, new Uri(REDIRECT_URL), parameters, UserIdentifier.AnyUser, EXTRA_QP, policy);
}
microsoft的文档并没有真正的帮助,因为大多数文档要么是空的(它们实际上还没有打印出来),要么是一年前的一些帮助主题。这是一个相当新的东西,所以文档似乎很难得到。
所以,亲爱的stackoverflow的人们,我错过了什么?为什么它说,重定向urI是无效的,当它已在azure web门户注册?如果重定向URI无效,为什么我可以首先检索标识提供程序?为什么经过几个小时的搜索,我似乎找不到解决方案,然而当我在这里发布问题时,我不知何故在几分钟内找到了答案…
这是一个相当愚蠢的错误,我的一个同事给我发了错误的权威url。有趣的是,它是正确的"足以"加载我们在门户上安装的身份提供程序,但不足以处理实际的登录或注册。
我最初使用的是:
https://login.microsoftonline.com/<tenant_id>/oauth2/authorize/
https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/authorize
看到那个小"v2.0"了吗?是啊,就是那个小混蛋造成了所有的痛苦…