标签: appauth

AppAuth与Azure AD B2C

我在Azure AD中配置了一个B2C服务,并将Google作为身份验证提供商,但却发现Google不允许通过嵌入式Web视图进行身份验证请求.然后我找到了AppAuth但是我在使用示例iOS应用程序时遇到了很多困难.

我遇到的问题与重定向uri有关.使用AAD为本机应用程序提供重定向uri会导致Safari Mobile出错.我尝试添加一个自定义重定向uri,它将重定向到我的iOS应用程序,但不能,因为它在azure广告配置中验证失败,因为它不在https url方案中.

是否可以将AppAuth与Azure AD B2C一起使用?有没有办法正确配置它或是否需要在MS端进行更改?

编辑

我有Azure AD B2C设置和工作,包括谷歌帐户登录.这在Web浏览器中按预期工作,但是当我尝试使用嵌入式webview从iOS登录Google时,我得到disallowed_useragent.研究这个我遇到了AppAuth库,我认为这是一个安全的选择解决方案,除了由于重定向问题它无法与B2C一起工作,或者至少我没有找到一种方法来使这项工作.

我希望我能够在B2C中提供我在iOS上的应用程序所独有的重定向URL,以便SFSafariViewController可以重定向回我的应用程序.在B2C中使用Web配置似乎是正确的方法,但它需要使用https而不是自定义方案.

有没有办法为自定义重定向URI配置B2C?

azure-active-directory appauth

6
推荐指数
1
解决办法
1032
查看次数

跨客户端Google OAuth:在iOS上获取身份验证代码并在服务器上获取访问令牌

我正在尝试使用我的iOS应用和Rails网络应用设置Google OAuth.我在API控制台中设置了2个单独的客户端(当然有不同的客户端ID,但具有相同的前缀).一个用于iOS应用程序,另一个用于Web应用程序(也有一个client_secret.我想在iOS上使用AppAuth SDK获取用户的身份验证代码,然后将其发送到我的Web应用程序,然后执行交换访问令牌.

首先,这听起来像是一件合理的事情,还是不可能在这样的客户之间拆分交易?

我的第一次尝试是只使用auth代码并执行交换,但是由于missing_code_verifier invalid_grant错误而失败,所以我也传递了相同的code_verifierAppAuth用于获取auth代码到我的服务器,并修复了该错误.首先,是否有必要将此代码验证程序传递给服务器?似乎有点奇怪.

现在,它失败并出现unauthorized_client错误.我的网络应用程序正在发出如下请求:

{
  "grant_type"=>"authorization_code",
  "code"=>"4/XYZ...",
  "client_id"=>"WEB_APP_CLIENT_ID_HERE.apps.googleusercontent.com", 
  "client_secret"=>"WEB_APP_CLIENT_SECRET_HERE", 
  "redirect_uri"=>"https://www.myapp.com/oauth_callback", 
  "parse"=>"json",
  "code_verifier"=>"CODE_VERIFIER_STRING_HERE"
}
Run Code Online (Sandbox Code Playgroud)

看看这样的帖子:

看起来这redirect_uri可能是一个问题.我在iOS上的AppAuth配置将重定向URI设置为com.googleusercontent.apps.iOS_CLIENT_ID_HERE,并且Info.plistURL方案也是如此.API控制台中的Web应用程序的"授权重定向URI"部分有一堆Web URL,我也添加了com.google...它.这个配置不正确吗?是redirect_uri做跨客户端身份验证时,重要吗?

任何帮助是极大的赞赏!到目前为止,我所有的试错都没有结果:(

ios oauth-2.0 google-oauth appauth

5
推荐指数
1
解决办法
1354
查看次数

在应用程序身份验证中获取 SSL 异常

尝试访问应用程序身份验证网址时出现以下错误。 E/AppAuth: Network error检索发现文档时。

javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found

android google-oauth appauth

5
推荐指数
0
解决办法
517
查看次数

Chrome 自定义标签在登录时有时会卡在空白屏幕上

我们最近将 AppAuth 集成到我们的应用程序中,以自动化 OAuth2 授权代码流。当用户想要登录时,他首先被重定向到我们的身份验证服务器,在那里他继续登录,然后被重定向回应用程序。

我们使用 chrome-custom-tabs 打开登录页面(AppAuth)。问题是它有时会卡在空白屏幕上(chrome 选项卡只显示空白页面,而没有呈现的站点或重定向)。当用户已经在浏览器中有一个会话时会发生这种情况,因此选项卡应该自动关闭并将用户重定向回应用程序(经过身份验证)。它的行为不一致,我们有时只会遇到这个问题(~50/50)。

我很高兴添加一些代码,但不知道从哪里开始(试图避免文本墙)。是否存在已知问题或警告?

我们尝试按照此处所述切换上下文,但一直遇到相同的问题。

android chrome-custom-tabs appauth

5
推荐指数
1
解决办法
1514
查看次数

OpenID AppAuth 和自定义选项卡 - 从不使用自定义选项卡,始终使用外部浏览器 - 为什么?

我正在使用 AppAuth 库,我希望它使用自定义选项卡,但它永远不会在支持 Play 商店的模拟器上或在我的运行 Oreo 的 HTC U11 设备上使用。Chrome 已安装。我尝试了很多配置但没有运气。

    val authService = AuthorizationService(applicationContext)

    val authIntent = authService.getAuthorizationRequestIntent(authRequest,
            authService.createCustomTabsIntentBuilder(Uri.parse(authorizationManager.openIdConfig!!.authorization_endpoint)).build())

    startActivityForResult(authIntent, REQUEST_AUTH)
Run Code Online (Sandbox Code Playgroud)

我尝试使用和不使用 createCustomTabsIntentBuilder,无论哪种方式,结果都完全相同。图我缺少最后一块秘密武器,只是不知道它是什么。

一切工作正常,我确实获得了授权,其余代码工作正常,它只是始终使用外部浏览器。

** 已解决 ** 当前的 AppAuth 库不支持 AndroidX。我提取了该库的代码,将其作为模块添加到我的应用程序中,将代码更新为 AndroidX 并更改了一行以使用正确的 CustomTab 字符串,现在一切都按预期工作。

BrowserSelector.java 第 187 行现在是

 serviceIntent.setAction(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION);
Run Code Online (Sandbox Code Playgroud)

android android-customtabs appauth

5
推荐指数
0
解决办法
1410
查看次数

AppAuth/OpenID-Connect:可以使用用户名和密码登录吗?

我想在 iOS 应用程序中通过 OpenID-Connect 实现登录。AppAuth-SDK 似乎是这样做的标准方法。下载一些示例后,我有点困惑。所有 AppAuth 示例和教程都使用 WebView,用户在其中输入用户名和密码。我想制作一个本机登录屏幕,用户必须在其中输入用户名和密码。AppAuth 是否可以做到这一点?我读到了一些关于“资源所有者密码授予”和“客户端秘密”的内容。这就是我需要的吗?

如果有人能把我推向正确的方向,我将非常感激。

ios openid-connect appauth

5
推荐指数
1
解决办法
1683
查看次数

如何修复“活动泄漏了最初绑定于此的 ServiceConnection net.openid.appauth.browser.CustomTabManager$1@41fb56d0”错误

我正在将我的 Android 应用程序设置为使用身份验证,并且正在遵循 Android 的 AppAuth 文档。到目前为止,我已经能够连接并向身份服务器发出请求,并收到包含我在请求中发送的大部分数据等的响应。我应该用我的代码交换访问令牌。这是我的问题。我实际上是在 github 页面https://github.com/openid/AppAuth-Android上复制并粘贴代码,但它因上述错误而崩溃。我对 Android 比较陌生,这是我的第一个问题,如果我没有很好地提出我的问题,请对我宽容一些。谢谢。

Android Studio 表示导致此错误的代码是“authService.performTokenRequest()”。我环顾四周,有些人通过在“onDestroy()”中调用“authService.dispose()”解决了这个问题,但也因“执行 doInBackground() 时发生错误”而崩溃。下面是导致错误的代码。

authService.performTokenRequest(
    resp.createTokenExchangeRequest(),
    new AuthorizationService.TokenResponseCallback() {
      @Override public void onTokenRequestCompleted(
            TokenResponse resp, AuthorizationException ex) {
          if (resp != null) {
            // exchange succeeded
          } else {
            // authorization failed, check ex for more details
          }
        }
    });
Run Code Online (Sandbox Code Playgroud)

在我的“onCreate()”中,我是这么称呼它的。

AuthorizationResponse resp = AuthorizationResponse.fromIntent(getIntent());
        AuthorizationException ex = AuthorizationException.fromIntent(getIntent());
        authState = new AuthState(resp, ex);
        authorizationService = new AuthorizationService(this);
        authorizationService.performTokenRequest(
                resp.createTokenExchangeRequest(),
                new AuthorizationService.TokenResponseCallback() {
                    @Override public void …
Run Code Online (Sandbox Code Playgroud)

android identityserver4 appauth

5
推荐指数
1
解决办法
1205
查看次数

无法从 Web 视图中恢复控制以在 OAuth 流程中对本机应用程序做出反应

我正在尝试使用 FormidableLab 的react-native-app-auth库在我的 react native android 应用程序中实现 Google OAuth 2 登录,如下所示:

  googleLoginPressed = async () => {
    const config = {
      serviceConfiguration: {
        authorizationEndpoint: 'https://accounts.google.com/o/oauth2/v2/auth', tokenEndpoint: 'https://accounts.google.com/o/oauth2/v2/auth', 
      },
      clientId: app_params.GOOGLE_CLIENT_ID, redirectUrl: 'https://<my_domain>/oauth/google',
      scopes: ['openid', 'profile', 'email'], additionalParameters: { 'response-type': 'code' },
    };
    try {
      const result = await authorize(config);
    } catch (error) {
      console.log(error);
    }
  }
Run Code Online (Sandbox Code Playgroud)

这会使用 Google 的登录页面调用 Web 视图,我可以成功验证自己的身份。然后 Google 正确地重定向到我的 oauth 回调端点,并code像它应该的那样在重定向 url 中填充 oauth 。在这一点上,我希望react-native-app-auth将控制权从 webview 恢复到应用程序。相反,Web 视图在重定向 url 页面上保持打开状态。 …

oauth-2.0 react-native appauth react-native-android

5
推荐指数
1
解决办法
1089
查看次数

Flutter appauth Invalid parameter: redirect_uri

I have local instance of keylcoak and I am trying to connect my flutter app to it and for that I am following the this tutorial but I got stuck on this redirect_uri issue.

In android's build.gradle I have added the following piece to default config:

  applicationId = 'com.my.example_app'
  manifestPlaceholders = [
        'appAuthRedirectScheme': 'com.my.example_app'
  ]
Run Code Online (Sandbox Code Playgroud)

In the code I have:

    const REDIRECT_URI = 'com.my.example_app://login-callback';
    //some code in between
    final AuthorizationTokenRequest req = AuthorizationTokenRequest(
    CLIENT_ID,
    REDIRECT_URI,
    allowInsecureConnections: true,
    issuer: ISSUER,
    discoveryUrl: …
Run Code Online (Sandbox Code Playgroud)

keycloak flutter appauth

5
推荐指数
1
解决办法
315
查看次数

如何使用 Flutter 通过 Auth0 进行安全注销?

我已经阅读了这篇关于如何开始在 Flutter 中使用 Auth0 的文章。

作者写道:“ ……完整的安全注销超出了本文的范围”。

文章中的注销方法是这样的:

void logoutAction() async {
await secureStorage.delete(key: 'refresh_token');
setState(() {
  isLoggedIn = false;
  isBusy = false;
});
Run Code Online (Sandbox Code Playgroud)

}

我从设备上的安全存储中删除了刷新令牌。现在,我希望能够进行更完整的注销,该用户必须使用用户名和密码再次进行完整登录。目前,用户无需输入用户名和密码即可登录,我认为这是由于访问令牌保存在某处。如果这是由于访问令牌造成的,我如何从浏览器 cookie 或存储它的任何位置删除此访问令牌?

避免存储访问令牌的一种方法是添加promptValues: ['login]到登录方法中。这样做的问题是用户每次都必须登录,因此完全消除了存储的访问令牌的好处。再次强调,我希望用户能够“完全”注销,从 cookie 中清除访问令牌。

Future<void> loginAction() async {
setState(() {
  isBusy = true;
  errorMessage = '';
});

try {
  final AuthorizationTokenResponse result =
      await appAuth.authorizeAndExchangeCode(
    AuthorizationTokenRequest(
      AUTH0_CLIENT_ID,
      AUTH0_REDIRECT_URI,
      issuer: 'https://$AUTH0_DOMAIN',
      scopes: ['openid', 'profile', 'offline_access'],
      // promptValues: ['login']
    ),
  );

  final idToken = parseIdToken(result.idToken);
  final profile = await getUserDetails(result.accessToken); …
Run Code Online (Sandbox Code Playgroud)

access-token auth0 flutter appauth

5
推荐指数
1
解决办法
1141
查看次数