MicrosoftGraphAuthProvider 不尊重 [Authenticate("microsoftgraph")] 属性
MicrosoftGraphAuthProvider does not respect [Authenticate("microsoftgraph")] attribute
我们已经实现了 MicrosoftGraphAuthProvider 并且它都设置正确,因为我们添加了一个端点来使用以下内容输出授权用户的凭据:
if (!IsAuthenticated) return null;
var session = this.Request.GetSession(true);
return session.ToJson();
这输出我的用户,提供者为 microsoftgraph。太棒了,一切都符合预期。
但是,当我们添加授权属性时:
[Authenticate("microsoftgraph")]
它 returns 一个 401,就好像我们根本没有登录一样。所有 ss-id 和 ss-pid 都在 headers 中正确发送,但它仍然是 returns 401。
然而,在系统的其他地方,我们正在使用相同的方法来限制 API 密钥授权
[Authenticate("apikey")]
我们目前有 3 个 IAuthProvider 加载到 API。
提供商本身是否存在问题,或者将服务限制为 microsfoftgraph 提供商背后是否存在不同的方法?
当您使用身份验证提供商名称时,例如:
[Authenticate("microsoftgraph")]
它告诉 ServiceStack 检查已注册的 AuthProvider 以确定它是否认为用户已通过身份验证,这是通过调用它的 IsAuthorized()
方法来完成的,MicrosoftGraphAuthProvider
没有定义,所以它使用它基础 OAuthProvider 实现:
public override bool IsAuthorized(IAuthSession session, IAuthTokens tokens, Authenticate request = null)
{
if (request != null)
{
if (!LoginMatchesSession(session, request.UserName)) return false;
}
return session != null && session.IsAuthenticated && !string.IsNullOrEmpty(tokens?.AccessTokenSecret);
}
您可以通过覆盖 AuthProvider 并实施 IsAuthorized
或覆盖您的 Custom UserSession 并覆盖 IsAuthorized(provider)
来覆盖此行为,例如:
public class MyUserSession : AuthUserSession
{
public override bool IsAuthorized(string provider)
{
if (provider == MicrosoftGraphAuthProvider.Name)
return IsAuthenticated && AuthProvider == provider;
return base.IsAuthorized(provider);
}
}
我们已经实现了 MicrosoftGraphAuthProvider 并且它都设置正确,因为我们添加了一个端点来使用以下内容输出授权用户的凭据:
if (!IsAuthenticated) return null;
var session = this.Request.GetSession(true);
return session.ToJson();
这输出我的用户,提供者为 microsoftgraph。太棒了,一切都符合预期。
但是,当我们添加授权属性时:
[Authenticate("microsoftgraph")]
它 returns 一个 401,就好像我们根本没有登录一样。所有 ss-id 和 ss-pid 都在 headers 中正确发送,但它仍然是 returns 401。
然而,在系统的其他地方,我们正在使用相同的方法来限制 API 密钥授权
[Authenticate("apikey")]
我们目前有 3 个 IAuthProvider 加载到 API。
提供商本身是否存在问题,或者将服务限制为 microsfoftgraph 提供商背后是否存在不同的方法?
当您使用身份验证提供商名称时,例如:
[Authenticate("microsoftgraph")]
它告诉 ServiceStack 检查已注册的 AuthProvider 以确定它是否认为用户已通过身份验证,这是通过调用它的 IsAuthorized()
方法来完成的,MicrosoftGraphAuthProvider
没有定义,所以它使用它基础 OAuthProvider 实现:
public override bool IsAuthorized(IAuthSession session, IAuthTokens tokens, Authenticate request = null)
{
if (request != null)
{
if (!LoginMatchesSession(session, request.UserName)) return false;
}
return session != null && session.IsAuthenticated && !string.IsNullOrEmpty(tokens?.AccessTokenSecret);
}
您可以通过覆盖 AuthProvider 并实施 IsAuthorized
或覆盖您的 Custom UserSession 并覆盖 IsAuthorized(provider)
来覆盖此行为,例如:
public class MyUserSession : AuthUserSession
{
public override bool IsAuthorized(string provider)
{
if (provider == MicrosoftGraphAuthProvider.Name)
return IsAuthenticated && AuthProvider == provider;
return base.IsAuthorized(provider);
}
}